Czy wszystkie metody HTTP są idempotentne?
sobes.tech AI
Odpowiedź od AI
Nie, nie wszystkie metody HTTP są identyczne.
Tożsamość oznacza, że jeśli wykonasz to samo żądanie wielokrotnie z tymi samymi parametrami, wynik po stronie serwera nie zmieni się po pierwszym udanym wykonaniu.
Główne metody HTTP i ich tożsamość:
| Metoda | Czy jest identyczna? | Cel |
|---|---|---|
GET |
Tak | Pobieranie danych |
HEAD |
Tak | Pobieranie nagłówków odpowiedzi |
PUT |
Tak | Tworzenie lub pełna zamiana zasobu |
DELETE |
Tak | Usuwanie zasobu |
POST |
Nie | Wysyłanie danych do tworzenia zasobu lub wykonania akcji |
PATCH |
Nie | Częściowa aktualizacja zasobu |
POST i PATCH nie są identyczne, ponieważ każde ich wykonanie może prowadzić do utworzenia nowego zasobu lub zmiany stanu zasobu w zależności od implementacji, co nie jest jednoznaczne po pierwszym udanym wykonaniu. Na przykład wielokrotne wykonanie żądania POST do tworzenia użytkownika zwykle spowoduje utworzenie kilku użytkowników.
Przykład nieidentycznego POST:
{
"username": "testuser"
}
Wysłanie takiego POST może utworzyć nowego użytkownika z username: "testuser" przy każdym wywołaniu.
Przykład identycznego PUT:
{
"id": 123,
"status": "completed"
}
Wysłanie takiego PUT na zasób z ID 123 ustawi jego status na "completed". Powtórne wykonanie nie zmieni statusu, jeśli już jest "completed".