Demande HTTP POST vide ou demande GET pour générer une valeur aléatoire via une API HTTP
Dans mon API HTTP, un des points de terminaison doit retourner une valeur générée de façon aléatoire, et la valeur qui sera associée à la authentifié appelant de l'ordinateur d'extrémité. Actuellement, j'ai la structure suivante:
GET http://example.com/random-ticket HTTP/1.1
Authorization: Basic base64-encoded-basic-auth-value
Accept: application/json
Host: example.com
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Date: Thu, 03 Oct 2013 07:25:56 GMT
Content-Length: 59
{"user-ticket":"Pfa42634e-1a2e-4a7d-84b9-2d5c46a8dd81"}
Une demande est émise pour récupérer la valeur aléatoire. Cependant, HTTP REÇOIS des appels doit être idempotent et mon ci-dessus mise en œuvre n'est pas d'obéir à cette règle. D'autre part, je ne suis pas sûr si c'est OK pour émettre des demandes HTTP POST avec un message vide corps.
Quelle est la bonne façon de réaliser ce type d'opérations par le HTTP livre?
source d'informationauteur tugberk
Vous devez vous connecter pour publier un commentaire.
La question est donc de ne pas les données renvoyées. C'est plutôt l'état du serveur: si
vous êtes le stockage de cette valeur sur le serveuril en résulte un changement dans l'état, alors il n'est pas apte pour les OBTENIR. Sinon, si c'est la valeur qui est retournée, elle est fine. Appel à http://stackoverflow.com retourne différentes données si elle est appelée à 10 minutes d'intervalle.Prenons un autre exemple, un service d'Horloge qui renvoie l'heure courante. Chaque fois que vous appelez, vous obtenez une valeur différente, mais l'appel lui-même n'entraîne pas un changement dans l'état sur le serveur depuis l'horloge de l'état est géré séparément. Donc, en utilisant OBTENIR ici est un bon choix.
Il n'y a absolument rien dans le HTTP interdisant l'utilisation des POSTES dont le corps est vide.
En outre, le message contient une représentation, qui est le corps + en-têtes. Dans votre cas, le corps est de longueur 0, ce qui est bien, et les en-têtes qui permettent d'identifier l'utilisateur.
Voir la discussion ici - http://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0273.html
Il n'y a pas de problème d'avoir un générateur aléatoire avec un GET comme il n'y a pas de serveur etat en cours de stockage. De la même façon, vous pourriez avoir une calculatrice qui accepte les paramètres et de les ajouter lors de l'une est appelée. La question sur cachable " est intéressante, mais ne s'applique pas à un générateur de hasard comme la ressource, par nature, n'est pas mis en cache. Cela ne change toujours pas le fait qu'il peut être conçu dans un coffre-fort/idempotent de la mode.
De POST sans un corps, ou même en utilisant des params dans une chaîne de requête, c'est très bien. La chose à propos de POST, c'est qu'il "peut" entraîner un changement sur le serveur. Il n'est pas garanti, soit qu'il sera, mais vous ne pouvez pas supposer qu'il ne sera pas comme avec un GET. Si oui ou non il y a tout le contenu en cours de définition, ne change pas le fait qu'il peut y avoir un changement. Par exemple, imaginez un fictifs de la ressource "\counter\incrément". Chaque fois que vous postez sur ce qu'il va provoquer \compteur à incrémentation. Je n'ai jamais envoyé de charge utile, mais je suis provoquer un changement dans l'état du serveur donc il devrait être POST ou PUT.
Vous devriez être en utilisant
POST
dans ce cas, parce que, par conception,GET
les appels peuvent être mis en cache. Quant à vide de corps post, il n'y a pas de problème. Un des scénarios similaires est également discutée au: POST avec corps est videdans lequel un post mentionne: