Pamiętaj, że w przypadku REST API wszystko zależy od Twojego punktu widzenia.
Dwie kluczowe koncepcje interfejsu API REST to punkty końcowe i zasoby (jednostki). Mówiąc luźno, punkt końcowy zwraca zasoby za pośrednictwem GET lub akceptuje zasoby za pośrednictwem POST i PUT i tak dalej (lub kombinacja powyższych).
Przyjmuje się, że w przypadku POST wysyłane dane mogą, ale nie muszą, skutkować utworzeniem nowego zasobu i skojarzonego z nim punktu (-ów) końcowego (-ych), który najprawdopodobniej nie będzie „żył” pod opublikowanym adresem URL. Innymi słowy, kiedy POST wysyłasz dane gdzieś do obsługi. Punkt końcowy POST nie znajduje się tam, gdzie normalnie można znaleźć zasób.
Cytowanie z RFC 2616 (z pominięciem nieistotnych części i podświetleniem odpowiednich części):
9.5 POST
Metoda POST służy do żądania, aby serwer pochodzenia zaakceptował jednostkę zawartą w żądaniu jako nowego podrzędnego zasobu określonego przez identyfikator żądania w wierszu żądania. POST został zaprojektowany, aby umożliwić jednolitą metodę obejmującą następujące funkcje:
- ...
- Udostępnienie bloku danych, np. Wynikającego z przesłania formularza, do procesu obsługi danych;
- ...
...
Akcja wykonana przez metodę POST może nie skutkować zasobem, który można zidentyfikować za pomocą identyfikatora URI . W takim przypadku odpowiedni stan odpowiedzi to 200 (OK) lub 204 (Brak treści), w zależności od tego, czy odpowiedź zawiera jednostkę opisującą wynik .
Jeśli zasób został utworzony na serwerze pochodzenia, odpowiedź POWINNA być 201 (utworzona) ...
Przyzwyczailiśmy się do punktów końcowych i zasobów reprezentujących „rzeczy” lub „dane”, czy to użytkownika, wiadomość, czy książkę - niezależnie od tego, na czym polega problem. Jednak punkt końcowy może również ujawniać inny zasób - na przykład wyniki wyszukiwania.
Rozważmy następujący przykład:
GET /books?author=AUTHOR
POST /books
PUT /books/ID
DELETE /books/ID
To jest typowy REST CRUD. A co by było, gdybyśmy dodali:
POST /books/search
{
"keywords": "...",
"yearRange": {"from": 1945, "to": 2003},
"genre": "..."
}
W tym punkcie końcowym nie ma nic nie-REST. Przyjmuje dane (podmiot) w postaci treści żądania. Te dane to kryteria wyszukiwania - DTO jak każde inne. Ten punkt końcowy tworzy zasób (jednostkę) w odpowiedzi na żądanie: Wyniki wyszukiwania . Zasób wyników wyszukiwania jest zasobem tymczasowym, udostępnianym klientowi natychmiast, bez przekierowania i bez ujawniania się z innego kanonicznego adresu URL.
Nadal jest REST, z wyjątkiem tego, że encje nie są książkami - encja żądania to kryteria wyszukiwania książek, a encja odpowiedzi to wyniki wyszukiwania książek.