2016-11-03 3 views
0

Je suis la conception d'un REST-API et actuellement je suis coincé avec la question suivante. Par exemple, je suis la structrue suivante:REST - adressable de resouces (Composition, Collection)

/foods/fruits/{fruit} 
/foods/meat/{meat} 

par exemple:

/foods/fruits/apple 
/foods/fruits/pinapple 
/foods/meat/chicken 

Chacun des points d'extrémité est unique (only one apple, one chicken), mais différentes sortes de fruits peuvent exister (par exemple l'ananas). Cependant mes service a besoin de retourner soit

  • un fruit spécifique (pomme),
  • tous les fruits (collection ressource remplie de tous les fruits accessable -> pomme, Pinapple)
  • ou l'aliment entier (composition de la collection-ressources de fruits et de la viande)

Avec cette conception est adressable mon ressource environ 3 URIs (composition, collection, endpoint), mais il devrait être un maximum de 2 C'est un design reposant?

+0

Personne a une idée? – Theiaz

Répondre

1

Avec ce design ma ressource est adressable sur 3 URIs (composition, collection, endpoint), mais ça devrait être un maximum de 2. C'est un design reposant?

Pourriez-vous fournir une référence pour la ligne directrice qu'il devrait être un maximum de 2?

Mais de toute façon - ces trois URIs ne sont pas 3 différents URIs pour la même ressource, ils sont trois ressources différentes:

  1. la ressource alimentaire
  2. une collection d'aliments d'un type particulier
  3. un type particulier de nourriture

Alors que les ressources antérieures peuvent être considérées comme composé des autres, cela ne signifie pas que le grain le plus fin (le type particulier, par exemple l'application le) est adressable via 3 URI.

Si vous utilisez un format hypermédia tels que HAL votre représentation de composition pourrait utilisée embarqués ressources, ce qui illustre clairement que les ressources contenues sont également disponibles directement via leur propre point final.

2

En regardant le Richardson Maturity Model, vous pourriez avoir une ressource Food générique et le point final, avec des propriétés telles que le type et le nom, et vos besoins seront accessibles comme ceci:

  • GET /api/food?name=apple
  • GET /api/food?type=fruit
  • GET /api/food
+0

Merci pour votre réponse. Je pense que cela peut aider. – Theiaz