la conception d'actions dans l'API REST - lorsque le repos de trop Reposante?

Je suis dans le processus de conception d'une API REST pour un projet sur lequel nous travaillons. C'est, je suis en train d'écrire le cahier des charges qui sera mis en œuvre plus tard.

Je vais avoir des ennuis à penser en noms propres/ressources au lieu de actions/les verbes. Sans entrer dans trop de projets spécifiques, nous écrivons une API autour de SVN. Par exemple, prendre les mesures qui valide les modifications sur le serveur SVN. Dans notre projet, nous avons de multiples définitions/versions de la validation de l'action:

  • simplement commettre de tous les fichiers modifiés
  • commettre une liste des fichiers modifiés (un sous-ensemble, au lieu de l'ensemble des fichiers modifiés)
  • ...

(1) Comment la conception de l'URL? La première question est, comment puis-je décrire la commit comme un nom/ressources au lieu d'un verbe?

Certains diront:

POST/PUT http://server.com/api/revision/commit

Devrait-il être un POST ou de vente? Je ne suis pas vraiment de la création d'un commettre des ressources, il n'est donc pas un POST. Cependant, je ne suis pas vraiment changer une commettre des ressources, il n'est donc pas un PUT. En fait, ce n'est pas un ressources, c'est un action. Une fois que l'action est exécutée, il a disparu, il n'y a pas de ressource pour être créé, modifié ou conservé pour référence ultérieure.

Cela dit, il doit être une ressource, de sorte que l'URL doit probablement être comme ce

POST http://server.com/api/revision/commitment

C'est également un POSTE, puisque nous sommes en créant un engagement. Nous ne sommes pas changer quoi que ce soit, donc pas de METTRE. Notez aussi que j'ai changé commettre en engagement, afin de refléter le fait que nous avons affaire à des ressources.

Cela fait-il sens? Pour moi, il ne fonctionne pas, il me pousse à la noix. Je veux exécuter une action, de ne pas créer une ressource qui ressemble à de l'action. Mais de toute façon.

Cela dit, pour aller plus loin, je viens de créer un engagement de ressources. Donc, logiquement, je devrais être capable de le récupérer plus tard:

GET http://server.com/api/revision/commitment/:id

Mais il n'y a aucun engagement de ressources! J'ai été forcé de faire un afin d'être paisible. tête explose

Alors, comment avez-vous vraiment spécifier les actions sur les ressources dans une API REST? Je ne parle pas le genre d'actions qui créent une ressource (créer un utilisateur, ...), mais sur le type d'actions qui manipulent une ressource ou d'un acte sur une ressource (commit révision, ...).

(2) Puis, d'autre part, dans le cas de la deuxième définition (voir ci-dessus), comment faire pour spécifier le sous-ensemble des fichiers modifiés? Par l'intermédiaire des paramètres ou dans une structure (par exemple tableau JSON) dans le CORPS? Qui est préférée? Existe-il des règles générales?

Merci à tous!

InformationsquelleAutor Appelsien S. | 2011-07-15