"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:
- 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.
- 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.
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.
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.
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