"Najlepsza" praktyka w odpowiedzi na post

Więc nic nowego tutaj po prostu staram się uzyskać jakieś wyjaśnienie i nie wydaje się znaleźć żadnego w innych postach.

Tworzę nowy zasób, powiedzmy:

/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 sam nie mogę sobie odpowiedzieć, brzmi: co powinien wrócić serwer w ciele.

Często robiłem tego typu odpowiedź:

{
  id: 12345,
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}

Zrobiłem to z kilku powodów:

  1. napisałem api dla frameworków typu angularjs. W moim konkretnego przypadku korzystam z zasobów angular i często potrzebuję tylko identyfikator zasobu, aby go zlokalizować. Jeśli nie zwróciłem dowodu osobistego w ciało odpowiedzi musiałbym przeanalizować go z lokalizacji nagłówek.
  2. W GET of all books Zwykle zwracam cały obiekt nie tylko dowód. W tym sensie mój kod klienta nie musi różnicować skąd pobrać identyfikator (nagłówek lokalizacji lub treść).

Teraz wiem, że naprawdę jestem w szarej strefie, ale większość ludzi mówi, że zwracanie całego zasobu jest " złą " praktyką. Ale co jeśli serwer zmienia / dodaje informacje do zasobu. Na pewno dodaje id, ale może również dodać inne rzeczy, takie jak znacznik czasu. W przypadku, gdy nie zwracam całego zasobu, czy naprawdę lepiej jest zrobić POST, zwrócić id, a następnie zlecić klientowi wykonanie dostępu do zdobądź nowy zasób.

Author: Moira, 2013-10-05

2 answers

Zwracanie całego obiektu podczas aktualizacji nie wydaje się zbyt istotne, ale trudno zrozumieć, dlaczego zwracanie całego obiektu po jego utworzeniu byłoby złą praktyką w normalnym przypadku użycia. Byłoby to przydatne przynajmniej w celu łatwego uzyskania identyfikatora i uzyskania znaczników czasu, gdy jest to istotne. Jest to w rzeczywistości domyślne zachowanie uzyskane podczas rusztowania z szynami.

Naprawdę nie widzę żadnej korzyści, aby zwrócić tylko ID i zrobić żądanie GET po, Aby uzyskać dane, które można mieć z twój pierwszy POST.

W każdym razie tak długo, jak API jest spójne myślę, że należy wybrać wzór, który najlepiej pasuje do Twoich potrzeb. Nie ma żadnego poprawnego sposobu budowania REST API, imo.

 147
Author: Daniel Perez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 11:25:22

Zwrócenie nowego obiektu pasuje do zasady " jednolity interfejs-manipulacja zasobami poprzez reprezentacje."Kompletny obiekt jest reprezentacją nowego stanu obiektu, który został utworzony.

Jest naprawdę doskonałe odniesienie do projektowania API, tutaj: najlepsze praktyki projektowania pragmatycznego RESTful API

Zawiera odpowiedź na twoje pytanie tutaj: aktualizacje i tworzenie powinny zwrócić zasób reprezentacja

Pisze:

Aby uniemożliwić konsumentowi API ponowne uruchomienie API dla zaktualizowaną reprezentację, niech API zwróci zaktualizowaną (lub utworzoną) reprezentacja jako część odpowiedzi.

Wydaje mi się ładnie pragmatyczny i pasuje do tej zasady odpoczynku, o której wspomniałem powyżej.

 234
Author: grahamesd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-09 20:21:18