J'ai besoin d'invoquer un processus qui ne nécessite aucune entrée de l'utilisateur, juste un déclencheur. Je prévois d'utiliser POST / uri sans corps pour déclencher le processus. Je veux savoir si cela est considéré comme mauvais du point de vue HTTP et REST?
177
Réponses:
J'ai posé cette question sur le 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).
la source
Utiliser un POST au lieu d'un GET est parfaitement raisonnable, car il demande également au serveur (et aux passerelles en cours de route) de ne pas renvoyer une réponse mise en cache.
la source
POST est complètement OK. À la différence de GET avec POST, vous changez l'état du système (votre déclencheur est probablement "faire" quelque chose et changer les données).
J'ai déjà utilisé POST sans charge utile et ça "se sent" OK. Une chose que vous devez faire lorsque vous utilisez POST sans charge utile: Passer l'en-tête
Content-Length: 0
. Je me souviens de problèmes avec certains proxys lorsque je ne l'ai pas passé avec le client api.la source
Si vous utilisez POST / uri sans corps, cela revient à utiliser une fonction qui ne prend pas d'argument .eg int post (void); il est donc raisonnable d'avoir une fonction pour votre classe de ressources qui peut changer l'état d'un objet sans avoir d'argument. Si vous envisagez d'implémenter la fonction tactile Unix pour un URI, n'est-ce pas un bon choix?
la source
Oui, vous pouvez envoyer une requête POST sans corps et utiliser à la place des paramètres de chaîne de requête. Mais attention si vos paramètres contiennent des caractères qui ne sont pas valides HTTP vous devrez les encoder.
Par exemple, si vous avez besoin de POST 'hello world' vers un point final, vous devrez le faire ressembler à ceci: http://api.com?param=hello%20world
la source
Le support pour les réponses que POST est OK dans ce cas est que dans le cas de Python, le framework OpenAPI "FastAPI" génère une interface graphique Swagger (voir image) qui ne contient pas de section Body lorsqu'une méthode (voir exemple ci-dessous) ne avoir un paramètre pour accepter un corps.
la méthode "post_disable_db" accepte juste un paramètre de chemin "db_name" et n'a pas de 2ème paramètre qui impliquerait un corps obligatoire.
la source