web-dev-qa-db-fra.com

Est-il considéré comme une mauvaise pratique d’exécuter HTTP POST sans corps d’entité?)

J'ai besoin d'invoquer un processus qui ne nécessite aucune intervention de l'utilisateur, mais simplement un déclencheur. Je prévois d'utiliser POST/uri sans un corps pour déclencher le processus. Je veux savoir si cela est considéré comme mauvais par HTTP et par les REST perspectives??).

136
Suresh Kumar

J'ai demandé cette question au groupe de travail HTTP de l'IETF il y a quelques mois. La réponse courte est: NON, ce n'est pas une mauvaise pratique (mais je suggère de lire le fil pour plus de détails).

115
Darrel Miller

L'utilisation d'un POST au lieu d'un GET est parfaitement raisonnable, car elle indique également au serveur (et aux passerelles en cours de route) de ne pas renvoyer une réponse en cache.

66
Adam Vandenberg

Le POST est complètement OK. En différence de GET avec POST vous modifiez l'état du système (votre déclencheur est très probablement "en train de" faire quelque chose et en modifiant des données).

J'ai utilisé POST déjà sans charge utile et il se sent "OK". Une chose à faire lorsque vous utilisez POST sans charge utile: en-tête de passe Content-Length: 0. Je me souviens de problèmes avec certains mandataires lorsque mon client api ne l’a pas réussi.

42
manuel aldana

Si vous utilisez POST/uri sans corps, utilisez une fonction qui ne prend pas d'argument .eg int post (void); il est donc raisonnable d'avoir une fonction dans votre classe de ressources. qui peut changer l'état d'un objet sans argument, si vous envisagez d'implémenter la fonction tactile Unix pour un URI, n'est-ce pas un choix judicieux?

14
yadab

Oui, vous pouvez envoyer une requête POST) et ne pas utiliser de corps mais utiliser des paramètres de chaîne de requête. Attention, si vos paramètres contiennent des caractères non valides HTTP, vous devrez les encoder.

Par exemple, si vous avez besoin de POST 'bonjour le monde') jusqu'au point d'arrivée, vous devrez le faire ressembler à ceci: http://api.com?param=hello% 20world

0
marko982