Prawidłowa odpowiedź na wstawkę REST - pełny nowy rekord, czy tylko wartość identyfikatora rekordu?

15

Buduję interfejs API REST, który umożliwia wstawianie (POST, nie idempotent) i aktualizację (PUT, idempotent) żądań dodania / aktualizacji bazy danych do naszej aplikacji.

Zastanawiam się, czy istnieją jakieś standardy lub najlepsze praktyki dotyczące tego, jakie dane wysyłamy z powrotem do klienta w odpowiedzi na operację POST (wstawianie). Musimy odesłać przynajmniej wartość identyfikatora rekordu (np. Nowy rekord to rekord nr 1234).

Czy powinniśmy odpowiedzieć pełnym przedmiotem? (np. zasadniczo taka sama odpowiedź, jaką otrzymaliby z żądania „GET / typ_obiektu / 1234”)

Czy powinniśmy odpowiadać tylko nową wartością identyfikatora? (np. „{id: 1234}”, co oznacza, że ​​jeśli chcą pobrać cały rekord, muszą wykonać dodatkowe żądanie HTTP GET, aby pobrać pełny rekord)

Nagłówek przekierowania wskazujący adres URL pełnego obiektu?

Coś zupełnie innego?

Keith Palmer Jr.
źródło
Nie jestem pewien co do najlepszych praktyk, ale dla mnie osobiście prawdopodobnie rozważyłbym zwrócenie nowo utworzonego identyfikatora, jeśli uda się inaczej -1 itd. Bądź zainteresowany, aby zobaczyć, co mówią inni
dreza

Odpowiedzi:

13

Cóż, w interfejsie REST, po HTTP, o ile to możliwe, zwrócę 201 i identyfikator URI w polu nagłówka Lokalizacja do nowo utworzonego zasobu. Oto, co mówi Definicja kodu statusu :

10.2.2 201 Utworzono

Żądanie zostało spełnione i utworzono nowy zasób. Do nowo utworzonego zasobu mogą odwoływać się identyfikatory URI zwrócone w encji odpowiedzi, przy czym najbardziej konkretny identyfikator URI dla zasobu jest podawany przez pole nagłówka Location. Odpowiedź POWINNA obejmować jednostkę zawierającą listę cech zasobów i lokalizacji, z których użytkownik lub agent użytkownika może wybrać najbardziej odpowiednią. Format encji jest określony przez typ nośnika podany w polu nagłówka Content-Type. Serwer pochodzenia MUSI utworzyć zasób przed zwróceniem kodu stanu 201. Jeśli akcja nie może zostać wykonana natychmiast, serwer POWINIEN odpowiedzieć 202 (Zaakceptowana).

Jeśli coś poszło nie tak, twierdzę, że nie powinieneś wracać, -1jak powiedzieli inni, ale po prostu kod błędu klienta lub serwera (4xx lub 5xx). Na przykład, jeśli użytkownik nie może utworzyć nowego zasobu, po prostu zwróci „401 Nieautoryzowany”, nic więcej i nic innego.

Bruno Schäpper
źródło
Co z ciałem? pusty czy cały nowo utworzony obiekt w odpowiedzi?
Deweloper
Dwie znane mi opcje to: 1) ustawienie nagłówka lokalizacji w miejscu, w którym można znaleźć nowy byt, lub 2) włączenie nowego bytu w ciele. Ja osobiście wybieram się z tym ostatnim z powodów praktycznych. Czasami łączą się, aby uzyskać bardziej spokojne uczucie;)
Bruno Schäpper