C'est une très vieille question, mais je tiens à offrir un point de vue légèrement différent de ce que je ne prétends pas être correct, juste mon point de vue.
Du point de vue du client
Commençons avec la première requête HTTP. D'abord et avant tout, la demande doit être POST. Vous envoyez un message au serveur pour créer une ressource. GET et PUT ne sont pas valables dans ce cas, parce que:
- Un GET n'est pas valide dans ce contexte, car une est destinée à obtenir la ressource à un endroit précis
- De vente n'est pas valable parce que vous n'êtes pas de la création de la demande, vous demandez au serveur pour créer la demande.
Du point de vue du service
Alors maintenant, vous êtes l'envoi d'un courrier au serveur pour traiter une demande. Le serveur a vraiment 3 valeurs de retour possibles (pas y compris le 4xx et 5xx erreurs):
- "201 Créé" indique que le service reçu la demande et a été en mesure de les traiter immédiatement ou dans un délai acceptable. Cette période de temps est complètement au service de la conception. C'est au développeur de service à la définir.
- "202 Accepté" indique que le service reçu la demande et de la traiter. Il est utilisé lorsque le service en sait quelque chose va prendre un certain temps. L'autre point de vue est que si le service est tributaire de toute autre opération asynchrone qu'il n'a aucun moyen de déterminer le résultat, alors il devrait retourner le "202 Accepté" réponse. Enfin, certains concepteurs peuvent tout simplement toujours revenir "202 Accepté", indépendamment de la façon dont rapidement, il peut être fait.
- Dans certains cas, vous obtiendrez un "302 Found". C'est généralement lorsque le service peut identifier une demande en générant une ressource qui existent déjà (et est toujours valide et pas dans un état d'erreur) et que la réutilisation d'une ressource existante est acceptable. Tous les services ne fonctionnent comme ceci: poster un commentaire sur l'un thread doit toujours créer de nouvelles ressources. Autres services: poste un ensemble de critères pour obtenir une liste des médecins qui produit le même liste des médecins. Si ces informations peuvent être réutilisées, puis la réutiliser.
- Avec toutes ces réponses, la "situation" en-Tête HTTP est retourné au client contenant où la ressource peut être trouvé. Ce qui est important et où certaines personnes ont tendance à diverger dans leur approche, comme vous le verrez plus tard. Si la ressource peut être réutilisée avec d'autres demandes, la "situation" devrait vraiment être générées de façon que la même demande toujours de générer la même Url. Cela fournit une bonne partie de la mise en cache et la réutilisation.
Lorsque le service a terminé la demande avec succès, il va créer de la ressource à l'emplacement qui a été renvoyée au client.
Maintenant c'est là que je commence à voir des choses un peu différente de la réponse ci-dessus.
Si le service ne parvient pas à remplir la demande, il convient toutefois de créer une ressource à l'emplacement qui a été retourné au client. Cette ressource doit indiquer la raison de l'échec. Beaucoup plus souple d'avoir une ressource de fournir des informations sur l'échec que d'essayer de chausse-pied dans le protocole HTTP.
Si le service reçoit la demande pour cette ressource avant qu'il soit terminé, il doit retourner un "404 not Found". La raison pour laquelle je pense qu'il devrait être un "404 not Found" c'est parce qu'il n'existe pas vraiment. Les spécifications HTTP ne dis pas que "404 not Found" ne peut être utilisé lorsqu'une ressource est jamais exister, qu'il n'existe pas de là maintenant. Ce type de réponse à un asynchrones flux d'interrogation est tout à fait correct à mon avis.
Il y a aussi le scénario de quand une ressource est censé être là pour un temps fixe. Par exemple, il peut s'agir de données basé sur une source qui est actualisé tous les soirs. Ce qui devrait arriver dans ces cas, c'est que la ressource doit être supprimé, mais un indicateur doit être fourni pour le service qu'il peut savoir de retour d'un "410 Gone" code d'état. Il s'agit essentiellement de dire au client que la ressource est là, mais n'est plus disponible (c'est à dire: peut-être expiré). L'action typique du client serait de soumettre à nouveau la demande.
Du point de vue du client à nouveau
Lorsque le client reçoit la réponse pour son POST initial, il devient le "Lieu" et en fait la demande au service à l'aide de l'URL à l'aide d'un GET (encore une fois, pas de POST). Le service sera généralement de réponse avec ces valeurs:
- "200 OK" indique que la demande ne soit terminée. Le résultat de la requête est renvoyée dans le contenu du corps, de fournir du contenu dans le format défini par l'Accepter en-tête HTTP.
- "404 not Found" serait de dire au client que la demande n'a pas encore complet, la ressource n'est pas encore là, et, dans ce cas, il devrait essayer de nouveau plus tard.
- "410 Gone" serait retourné dans les cas où le client peut tenter d'accéder à la ressource après une longue période de temps et il n'est plus là. Dans ce cas, il convient simplement de soumettre à nouveau la requête d'origine
La seule chose qui doit être souligné est que la ressource retournée est généralement dans un format qui peut définir le succès et l'échec des réponses. Le client doit être en mesure de déterminer à partir de cette ressource si il y a une erreur, ce qu'il était, et être en mesure de réagir en conséquence.
Aussi, le développeur de service peut faire en sorte que l'expiration du service et supprime l'erreur des ressources après une courte période de temps.
Donc, c'est ma pensée sur cette question. Il est très en retard à la fête, mais j'espère que les futurs lecteurs peuvent voir d'un point de vue légèrement différent d'un fréquemment posées question.