Ich muss einen Prozess aufrufen, für den keine Benutzereingaben erforderlich sind, sondern nur ein Auslöser. Ich plane, POST / uri ohne Körper zu verwenden, um den Prozess auszulösen. Ich möchte wissen, ob dies sowohl aus HTTP- als auch aus REST-Sicht als schlecht angesehen wird.
176
Antworten:
Ich habe diese Frage vor einigen Monaten in der IETF-HTTP-Arbeitsgruppe gestellt. Die kurze Antwort lautet: NEIN, es ist keine schlechte Praxis (aber ich empfehle, den Thread für weitere Details zu lesen).
quelle
Die Verwendung eines POST anstelle eines GET ist durchaus sinnvoll, da der Server (und die Gateways auf dem Weg) angewiesen werden, keine zwischengespeicherte Antwort zurückzugeben.
quelle
POST ist völlig in Ordnung. Im Unterschied zu GET und POST ändern Sie den Status des Systems (höchstwahrscheinlich "tut" Ihr Trigger etwas und ändert Daten).
Ich habe POST bereits ohne Nutzlast verwendet und es "fühlt" sich OK an. Eine Sache, die Sie tun sollten, wenn Sie POST ohne Nutzlast verwenden: Übergeben Sie den Header
Content-Length: 0
. Ich erinnere mich an Probleme mit einigen Proxys, als ich den API-Client nicht bestanden habe.quelle
Wenn Sie POST / uri ohne Body verwenden, ist dies so etwas wie die Verwendung einer Funktion, die kein Argument akzeptiert .eg int post (void); Daher ist es sinnvoll, eine Funktion für Ihre Ressourcenklasse zu haben, die den Status eines Objekts ohne Argument ändern kann. Wenn Sie die Unix-Touch-Funktion für einen URI implementieren möchten, ist dies nicht eine gute Wahl?
quelle
Ja, es ist in Ordnung, eine POST-Anforderung ohne Text zu senden und stattdessen Abfragezeichenfolgenparameter zu verwenden. Seien Sie jedoch vorsichtig, wenn Ihre Parameter Zeichen enthalten, die nicht HTTP-gültig sind, müssen Sie sie codieren.
Wenn Sie beispielsweise "Hallo Welt" an und Endpunkt POSTEN müssen, müssen Sie es so aussehen lassen: http://api.com?param=hello%20world
quelle
Die Antwort, dass POST in diesem Fall in Ordnung ist, wird dadurch unterstützt, dass in Pythons Fall das OpenAPI-Framework "FastAPI" eine Swagger-GUI (siehe Bild) generiert, die keinen Body-Abschnitt enthält, wenn eine Methode (siehe Beispiel unten) dies nicht tut einen Parameter haben, um einen Körper zu akzeptieren.
Die Methode "post_disable_db" akzeptiert nur einen Pfadparameter "db_name" und hat keinen zweiten Parameter, der einen obligatorischen Body implizieren würde.
quelle