2015-12-08 1 views
0

J'ai un contrôleur pour ProductController. J'ai 4 méthodes standard lié à methodslike HTTP respectifsAPI de repos ou API semi-repos

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

Jusqu'à présent, si bon, mais je dois faire quelques autres fonctions comme getProductsByCategory, getProductsAttributes() etc etc. Après la mise en œuvre cela, que mon API appelée encore REST ? Sinon que comment puis-je gérer ces exigences

Merci

+1

La question que vous avez décrit n'a rien à voir avec votre service être RESTful ou non. – csmckelvey

Répondre

2

URI de ressource pour getProductsByCategory (...):

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

URI de ressource pour getProductsAttributes():

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

Comment vous implémentez la gestion de ces URI de requête est un détail d'implémentation. Si vous utilisez un cadre, vous pouvez faire quelque chose comme ceci:

Mais il est un détail qui ne peut pas affecter RESTfullness de votre service.

1

Tout d'abord, REST n'est pas une norme stricte. Les méthodes que vous avez publiées sont conformes aux conventions REST, mais un service REST doit posséder plusieurs autres propriétés. Les deux plus importants sont:

  • apatridie: pas de session, pas de cookies, l'autorisation sur une base
  • GET requeste ne changera jamais aucune ressource

par demande Il existe d'autres, ne hésitez pas modifier ou ajouter dans les commentaires.

La façon dont je vois ces opérations sur les moyens mis en œuvre la plupart du temps est:

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

Par exemple:

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

Comment décririez-vous 'getProductByCateogry'? –

+1

getProductByCategory ou getProduct ** s ** ByCategory? J'implémenterais le dernier en tant que 'GET/category/tools/products' – marstato