2013-03-03 11 views
8

Jak możemy obsłużyć pustą kolekcję na interfejsie RESTful, z nagłówkiem Content-Range's items?Puste zbiory i nagłówki HTTP Zakres zawartości

Na przykład, mając 42 zapisy, żądanie Range: items=0-41 zwróci wszystko, a nagłówek odpowiedzi będzie następujący: Content-Range: items 0-41/42.

Jak jednak postępować z nagłówkiem Content-Range, gdy nie ma żadnych rekordów? Dzięki za pomoc.

Edit:

Znaczy, wracając pustą kolekcję, serwer może chcieć wrócić Content-Range: items x-y/0, gdzie x i y to wartość, która byłaby inna niż 0. Ale który? Myślę, że jest to pytanie przyklejone, a specyfikacja nie wspomina o tym.

Odpowiedz

5

W rzeczywistości serwer powinien odpowiedzieć z żądaniem HTTP 416 niezadowalającym, z Content-Range: */0.

+0

Naprawdę? Całkowicie inny kod statusu, gdy kolekcja jest pusta? Spodziewałbym się statusu 200 z pustą tablicą jako wynik. "Treść-Zakres: */0" ma jednak sens. –

+0

Patrząc w to trochę więcej, myślę, że status 416 był przeznaczony, gdy żądanie zawiera nagłówek 'Range', który określa nieprawidłowy zakres. Jeśli jednak nie określono zakresu, nadal chcesz zastosować zakres domyślny. Osobiście uważam, że 416 jest bardzo nieprzyjazny, nawet jeśli określono zakres. Jeśli poprosię o 'Range: 0-99', po prostu chcę dostać pierwszą" stronę "100 pozycji. Kogo to obchodzi, jeśli faktycznie jest mniej? Przeczytam nagłówek odpowiedzi, żeby to zrozumieć. Ale jeśli zwróci status 416, zmuszamy klienta do żądania najpierw łącznej liczby wyników osobno. To nie ma sensu. –

+0

Myślę, że 416 ma sens, jeśli * początek * zakresu był poza zasięgiem. Jednak, aby zmusić klientów, aby jako pierwsi uzyskali łączną wartość, aby mogli dopasować * koniec * zakresu, aby pozostać w sumie, kończy się to bardzo nieintuicyjnym (i powolnym) API. –

0

Jeśli otrzymujesz niezerowe liczby dla X-Y/0 - wtedy odpowiedź z serwera jest nieważna (zepsuta). Złóż błąd.

+1

OK. Co więc powinno odpowiedzieć na serwer, jeśli kolekcja jest pusta? Posiadanie 'Content-Range: 0-0/0' byłoby niemożliwe, ponieważ' 0-0' oznacza * 1 rekord * wewnątrz kolekcji. – Doug

+1

Brak treści, więc nie zwrócisz nagłówka Content-Range. Jeśli * musisz *, specyfikacja pozwala zwrócić gwiazdkę ("*") w przypadkach, w których (z RFC): "długość instancji nie jest znana w momencie wygenerowania odpowiedzi." – Kylar

+0

* "Nie ma zawartości, więc nie zwrócisz nagłówka Content-Range." *, Nie wiesz, czy to ma sens. Dlaczego traktować pustą kolekcję jako wyjątek (bez nagłówka zakresu i statusu 416 sugerowanego przez zaakceptowaną odpowiedź)? To nie ma sensu w moim umyśle. Pusta kolekcja jest normalna. Nie ma powodu, by traktować to tak, jakby to był jakiś dziwny przypadek. –

Powiązane problemy