2009-03-30 6 views
2

Je suis en train de concevoir un service REST et j'essaie de peser le pour et le contre de l'utilisation de l'ensemble des verbes http et de la négociation de contenu par rapport aux variables de chaîne GET. Mon choix affecte-t-il la cachabilité? Aucune solution ne peut convenir à tous les domaines.Verbes HTTP et négociation de contenu ou chaînes GET pour le service REST?

Quel est le meilleur pour le crud et les requêtes (par exemple? Action = PUT)?

Quel est le meilleur pour la sélection de version api (par exemple? Version = 1.0)?

Quel est le meilleur pour le type de données de retour (par exemple? Type = json)?

Répondre

5

CRUD/Les requêtes sont mieux représentées avec les verbes HTTP. Une création et mise à jour est généralement un PUT ou un POST. Une récupération serait un GET. Les suppressions seraient un DELETE. C'est généralement la cartographie. Le point principal est qu'un GET ne provoque pas d'effets secondaires, et que les verbes font ce que vous attendez d'eux.

Mettre l'action dans l'URI est OK si c'est la seule façon de la passer (par exemple, la bibliothèque client http ne vous permet pas d'envoyer des requêtes non-GET/POST). La plupart des bibliothèques font, cependant, il est fortement conseillé pas de passer le verbe via l'URL. La meilleure façon de mettre à jour l'API serait d'utiliser des en-têtes HTTP à la demande; Cela permet aux clients de mettre à niveau/rétrograder des demandes spécifiques au lieu de toutes les autres. Bien sûr, cette granularité de la gestion des versions doit être intégrée au début et pourrait sérieusement compliquer le code côté serveur. La plupart des gens utilisent simplement l'URL utilisée pour accéder aux serveurs. Une explication plus longue est dans un blog post by Peter Williams, "Versioning Rest Web Services"

Il n'y a pas de meilleur type de données de retour; Cela dépend de votre application. JSON peut être plus facile pour les sites Web Ajax, tandis que XML peut être plus facile pour les structures complexes que vous souhaitez interroger avec Xpath. Les tampons de protocole sont une troisième option. Il est également débattu s'il est préférable de spécifier le protocole de retour dans l'URL ou dans les en-têtes HTTP. Pour la plupart, les en-têtes auront le plus grand impact sur la mise en cache, puisque les proxys sont censés les respecter quand ils le sont, tout comme les agents utilisateurs (bien sûr, les UA se comportent différemment). La mise en cache basée uniquement sur l'URL dépend beaucoup des couches. Certains agents utilisateurs ne mettent pas en cache quoi que ce soit avec une chaîne de requête (Safari, iirc), et les proxys sont libres de mettre en cache ou de ne pas mettre en cache comme ils le jugent approprié.

Questions connexes