Więc nic nowego tutaj Po prostu próbuję uzyskać wyjaśnienie i nie mogę znaleźć żadnych innych postów.
Ponownie tworzę nowy zasób, powiedz:
/books (POST)
z ciałem:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Wiem, że powinienem zwrócić 201 (utworzony) z nagłówkiem lokalizacji nowego zasobu:
Location: /books/12345
Pytanie, na które nie potrafię odpowiedzieć, brzmi: co serwer powinien powrócić w ciele?
Często robiłem tego typu odpowiedzi:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Zrobiłem to z kilku powodów:
- Napisałem API dla frameworków takich jak angularjs. W moim szczególnym przypadku używam zasobów kątowych i często potrzebuję tylko identyfikatora zasobu, aby go zlokalizować. Gdybym nie zwrócił identyfikatora w treści odpowiedzi, musiałbym parsować go poza nagłówkiem Location.
- W GET ze wszystkich książek zwykle zwracam cały obiekt, a nie tylko identyfikator. W tym sensie mój kod klienta nie musi rozróżniać, skąd uzyskać identyfikator (nagłówek lub treść).
Teraz wiem, że tak naprawdę jestem tutaj w szarej strefie, ale większość ludzi twierdzi, że zwrócenie całego zasobu jest „złą” praktyką. Ale co, jeśli serwer zmieni / doda informacje do zasobu. Z pewnością dodaje identyfikator, ale może również dodawać inne rzeczy, takie jak znacznik czasu. W przypadku, gdy nie zwracam całego zasobu, czy naprawdę lepiej jest wykonać test POST, zwróć identyfikator, a następnie poproś klienta o wykonanie operacji GET, aby uzyskać nowy zasób.
źródło
Odpowiedzi:
Zwracanie całego obiektu w ramach aktualizacji nie wydaje się zbyt istotne, ale trudno mi zrozumieć, dlaczego zwracanie całego obiektu podczas jego tworzenia byłoby złym postępowaniem w normalnym przypadku użycia. Przydałoby się to przynajmniej w celu łatwego uzyskania identyfikatora i uzyskania znaczników czasu, gdy jest to istotne. Jest to w rzeczywistości domyślne zachowanie stosowane podczas rusztowania za pomocą Rails.
Naprawdę nie widzę żadnej korzyści ze zwracania tylko identyfikatora i wykonywania żądania GET później, aby uzyskać dane, które można uzyskać za pomocą pierwszego testu POST.
W każdym razie, dopóki interfejs API jest spójny, uważam, że powinieneś wybrać wzór, który najlepiej odpowiada Twoim potrzebom. Nie ma właściwego sposobu na zbudowanie interfejsu API REST, imo.
źródło
Zwrócenie nowego obiektu jest zgodne z zasadą REST „Jednolity interfejs - manipulowanie zasobami poprzez reprezentacje”. Kompletny obiekt jest reprezentacją nowego stanu utworzonego obiektu.
Jest naprawdę doskonała referencja do projektowania API, tutaj: Najlepsze praktyki projektowania Pragmatic RESTful API
Zawiera odpowiedź na twoje pytanie tutaj: Aktualizacje i tworzenie powinny zwrócić reprezentację zasobów
To mówi:
Wydaje mi się to bardzo pragmatyczne i pasuje do wspomnianej powyżej zasady REST.
źródło