2015-12-08 7 views
0

У меня есть контроллер для ProductController. Я 4 стандартные методы связаны с соответствующими HTTP methodslikeAPI-интерфейс Rest API или Semi Rest API

public function index() // GET 
public function create() // POST 
public function update() // PUT 
public function destroy() //DELETE 

До сих пор так хорошо, но я должен сделать несколько других функций, таких как getProductsByCategory, getProductsAttributes() и т.д. и т.п. После реализации этого Будет ли мой API еще можно назвать REST ? Если не чем, как я могу справиться эти требования

Благодарности

+1

Вопрос вы описали, не имеет ничего общего с вашими услугами будучи RESTful или нет. – csmckelvey

ответ

2

Ресурс URI для getProductsByCategory (...):

GET /products?category=books HTTP/1.1 
Host: service.org 

ресурсов URI для getProductsAttributes():

GET /products/bmw-528i/attributes HTTP/1.1 
Host: service.org 

Как вы реализуете обработку этих URI запросов, является деталью реализации. Если вы используете какую-то рамку, вы можете сделать что-то вроде этого:

Но это деталь, которая не может повлиять на RESTfullness вашей службы.

1

Во-первых, REST не является строгим стандартом. Методы, которые вы опубликовали, соответствуют соглашениям REST, но служба REST должна иметь несколько других свойств. Два наиболее важных из них не являются:

  • безгражданства: нет сессии, не печенье, разрешения на основе каждого запроса
  • GET requeste никогда не изменить любой ресурс

Есть другие, не стесняйтесь редактировать или добавлять комментарии.

как я вижу такие операции по ресурсам реализуется большой частью времени:

/<resource-name>/<product-id>/<operation>

Например:

GET /product/<product-id> 
GET /product/<product-id>/related 
POST /product/<product-id>/purchase 
GET /categories/tools 
+0

Как вы бы описали 'getProductByCateogry'? –

+1

getProductByCategory или getProduct ** s ** ByCategory? Я бы использовал последний как «GET/category/tools/products» – marstato