Projektuję interfejs API do obsługi protokołu HTTP i zastanawiam się, czy dobrym rozwiązaniem jest użycie polecenia HTTP POST, ale z parametrami zapytań URL i bez treści żądania.
Uwagi:
- „Dobry projekt internetowy” wymaga wysłania za pomocą POST działań nie idempotentnych. To działanie nie idempotentne.
- Łatwiej jest rozwijać i debugować tę aplikację, gdy parametry żądania są obecne w adresie URL.
- Interfejs API nie jest przeznaczony do powszechnego użytku.
- Wygląda na to, że wykonanie żądania POST bez treści zajmie nieco więcej pracy, np.
Content-Length: 0
Nagłówek musi zostać wyraźnie dodany. - Wydaje mi się również, że test POST bez ciała jest nieco sprzeczny z oczekiwaniami większości programistów i środowisk HTTP.
Czy są jakieś pułapki lub zalety wysyłania parametrów na żądanie POST za pośrednictwem zapytania URL, a nie treści żądania?
Edycja: Powodem tego jest to, że operacje nie są idempotentne i mają skutki uboczne inne niż pobieranie. Zobacz specyfikację HTTP :
W szczególności ustanowiono konwencję, że metody GET i HEAD NIE POWINNY mieć znaczenia innego niż odzyskanie. Metody te należy uznać za „bezpieczne”. Pozwala to agentom użytkownika na reprezentowanie innych metod, takich jak POST, PUT i DELETE, w specjalny sposób, dzięki czemu użytkownik jest informowany o tym, że żądane jest potencjalnie niebezpieczne działanie.
...
Metody mogą również mieć właściwość „idempotence”, ponieważ (oprócz błędów związanych z błędem lub wygasaniem) skutki uboczne N> 0 identycznych żądań są takie same jak w przypadku pojedynczego żądania. Metody GET, HEAD, PUT i DELETE współużytkują tę właściwość. Ponadto metody OPCJE i ŚLEDZENIE NIE POWINNY wywoływać skutków ubocznych, a zatem są z natury idempotentne.