2011-05-18 15 views
34

Powiedzmy, że istnieje Produkt z Zamówieniami. Jeśli poprosisz o/products/product_id, zwróci 404, jeśli product_id nie istnieje. Ale powinien/products/product_id/orders zwróci 404, jeśli nie ma zamówień na ten produkt lub powinien zwrócić pustą tablicę?Czy RESTful API powinien zwracać 404 dla tablic obiektów?

+0

yo możesz zdefiniować własne wyniki. Daj każdemu wynikowi inny identyfikator – Grumpy

+2

+1: Debatujemy teraz nad tym samym pytaniem, korzystając z kolekcji ofert wideo. –

+0

@Grumpy możesz wyjaśnić, co masz na myśli trochę więcej? – rbp

Odpowiedz

47

Chciałbym zwrócić pustą kolekcję. Produkt z zerowymi zamówieniami jest całkowicie poprawną koncepcją, więc istnienie pustej kolekcji zamówień ma więcej sensu niż 404, co sugerowałoby, że produkt ten nie ma kolekcji zamówień.

+2

+ 1, Poszliśmy tą drogą i jestem zadowolony z decyzji. – ale

+0

Czy zamówienia powinny być uważane za samodzielny zasób? lub jakąś informację zwróconą przez zasób product_id? – chernevik

+0

Chernevik Tak. Jeśli jest to inny adres URL i może zwrócić wartość 200, oznacza to inny zasób. Serwer może obsługiwać oba zasoby przy użyciu tego samego kontrolera, ale są to dwa różne zasoby. –

2

Powinieneś zrobić tylko jeden z dwóch rzeczy

Albo Zwraca 200 (OK) kod statusu oraz pustą tablicę w organizmie.

Lub Zwróć kod statusu 204 (NO CONTENT) i NIE CIAŁA odpowiedzi.

Dla mnie opcja 2 wydaje się bardziej technicznie poprawna i zgodna z zasadami REST i HTTP.

Jednak opcja 1 wydaje się bardziej wydajna dla klienta - ponieważ klient nie potrzebuje dodatkowej logiki do rozróżnienia dwóch kodów statusu (sukcesu). Ponieważ wie, że zawsze otrzyma tablicę, to po prostu musi sprawdzić, czy to ma żadnego, jeden, lub wiele pozycji i przetwarza je odpowiednio

0

moim zdaniem:

Mówimy wartości stanu HTTP tutaj i powinien mieć wyższy poziom udzielania odpowiedzi.

Należy to zobaczyć w warstwach uczestników. Podobnie jak wtedy, gdy api nie jest w stanie odpowiedzieć na prośbę, na wypadek, gdyby połączenie api było nieosiągalne, mógłbyś odpowiedzieć 404.

Ale kiedy twój telefon dzwoni i może odpowiadać zbiorem danych, ale jest to pusta kolekcja, możesz zwrócić tylko http 200, z pustym wynikiem.

Chciałbym użyć wartości statusu http, aby podać wskazanie na sprawdzanie poprawności wniosku, a nie bezpośrednio uzależnić go od zawartości w głębszych warstwach api.

Albo można by ściśle przestrzegać protokołów znalezione w internecie, ale nikt ich nie następuje ...

Powiązane problemy