2010-11-28 7 views
0

Je développe une API simple REST:trouver des ressources par attribut unique

  • JSON
  • principalement opérations comme CRUD
  • POST pour créer, PUT pour la mise à jour

Chaque ressource est identifié par une poignée de base de données unique (en pratique un incrément automatique), qui est exposée à travers l'URI comme ceci:

/collection/131 

La représentation d'une collection est une liste des ressources de l'enfant, comme celui-ci:

{ 
    "children": [ 
    { "name": "foo", "href": "/collection/131" } 
    ] 
} 

le champ « nom » doit être unique dans la collection. Je suis assez satisfait de ce modèle, sauf pour une chose; pour trouver une ressource avec un nom donné, vous devez parcourir la représentation de la collection. Comment pourrait-on mieux ajouter un mécanisme de «résolution du nom à l'URI» et rester fidèle à REST? Je vois les options suivantes:

  1. mettre le nom dans l'URI
  2. faire la interrogeable collection
  3. une sorte de mécanisme de redirection ou recherche

La raison pour laquelle je ne veux pas faire (1) est que l'espace adresse URI ne fait pas partie de l'API mais un détail d'implémentation. La seule ressource connue est la ressource racine, à partir de laquelle toutes les autres ressources peuvent être trouvées.

Comment puis-je simplifier la tâche des utilisateurs de l'API pour résoudre un nom en URI?

Répondre

1

Ceci est l'un des problèmes avec REST. Il n'y a pas assez de méthodes HTTP pour prendre en charge les opérations courantes.

Certains diront ce n'est pas la bonne façon REST pour ce faire, mais je ne peux pas voir comment ce que vous pourriez le faire:

/collection/findByName?name=...

Edit: Vous pouvez également opter pour un plus générique méthode trop que vous pourriez éventuellement étendre:

/collection/search?name=...

/collection/search?name=...&something=...

Edit (2): Qu'en est-il: /collection?name=...

Je crois qu'à la fin cela se résume à ce que vous pensez être plus intuitif.

  • Christian
+0

Il n'y a rien "unrestful" au sujet de vos suggestions. Personnellement, je resterais simple et ferais '/ collection?name = 'blah'' La représentation résultante serait une liste de liens vers des ressources où le nom =' blah '. –

+0

@Darrel: ou, puisque le nom est spécifié comme unique, la représentation résultante serait une redirection vers la ressource canonique appropriée. @jrydberg: jetez un oeil à http://www.aminus.org/rbre/shoji/shoji-draft-02.txt pour votre type de média; il est très bien supporté pour exposer des URL de recherche ("catalogues") comme vous le décrivez. – fumanchu

+0

@fumanchu C'est une idée intéressante à rediriger si la collection ne contient qu'un seul résultat. –

Questions connexes