J'ai réfléchi à la bonne méthode de définition des collections de ressources interdépendantes.API REST Création de liens entre les collections de ressources
Par exemple, permet de considérer les « documents » et « commentaires » qui sont indépendamment accessibles via l'URI:
/documents/{doc-uri}
/comments/{comment-id}
Cependant, nous voulons généralement la collecte des commentaires relatifs à un document spécifique. Ce qui crée une question de conception sur la façon dont cela devrait être archétecté.
Je peux voir quelques options principales:
1.) Fournir une collection uri après le document uri pour commentaires
GET /documents/{doc-uri}/comments/
2.) Fournir un paramètre à la collection de commentaires pour sélectionner par document 3. Utiliser la négociation de contenu pour demander que les commentaires soient renvoyés via l'en-tête Accept.
// Get all the comments for a document
GET /documents/{doc-uri} Accept: application/vnd.comments+xml
// Create a new comment
POST /documents/{doc-uri} Content-Type: application/vnd.comment+xml <comment>...</comment>
Méthode 1 a l'avantage de mettre automatiquement les commentaires dans le contexte du document. Ce qui est également agréable lors de la création, la mise à jour et la suppression de commentaires en utilisant POST/PUT. Cependant, il n'offre pas un accès global aux commentaires en dehors du contexte d'un document. Donc, si nous voulions faire une recherche sur tous les commentaires dans le système, nous aurions besoin de la méthode n ° 2.
La méthode 2 offre plusieurs des mêmes avantages que le n ° 1, mais créer un commentaire sans le contexte d'un document n'a aucun sens. Puisque les commentaires doivent explicitement être liés à un document.
La méthode 3 est intéressante à partir d'une perspective GET et POST/create, mais elle devient un peu plus difficile avec la mise à jour et la suppression.
Je peux voir les avantages et les inconvénients de toutes ces méthodes, donc je suis à la recherche de plus de conseils de quelqu'un qui a peut-être approché et résolu ce problème auparavant.
Je considère faire les deux méthodes 1 & 2, ainsi je peux fournir toutes les fonctionnalités nécessaires, mais je suis inquiet que je puisse compliquer/dupliquer la fonctionnalité.
Vous vouliez dire hypermédia, pas hypertexte. C'est la partie HATEOAS (http://en.wikipedia.org/wiki/HATEOAS) de REST. – jpbochi