@ray, doskonała dyskusja
@jgerman, nie zapominaj, że tylko dlatego, że jest to REST, nie oznacza, że zasoby muszą być osadzone w kamieniu z POST.
To, co zdecydujesz się uwzględnić w dowolnej reprezentacji zasobu, zależy od Ciebie.
Twój przypadek okładek, do których odwołuje się osobno, jest jedynie stworzeniem zasobu nadrzędnego (komiksu), do którego zasobów podrzędnych (okładek) można się odwoływać. Na przykład możesz również chcieć osobno podać odniesienia do autorów, wydawców, postaci lub kategorii. Możesz chcieć utworzyć te zasoby osobno lub przed komiksem, który odnosi się do nich jako zasobów podrzędnych. Alternatywnie możesz chcieć utworzyć nowe zasoby podrzędne podczas tworzenia zasobu nadrzędnego.
Twój konkretny przypadek okładek jest nieco bardziej złożony, ponieważ okładka naprawdę wymaga komiksu i na odwrót.
Jeśli jednak uznasz wiadomość e-mail za zasób, a adres nadawcy jako zasób podrzędny, możesz oczywiście nadal odwoływać się do adresu nadawcy osobno. Na przykład pobierz wszystko z adresów. Lub utwórz nową wiadomość z poprzednim adresem nadawcy. Gdyby poczta e-mail była typu REST, można z łatwością zauważyć, że dostępnych jest wiele powiązanych zasobów: / odebrane-wiadomości, / robocze wiadomości, / od-adresy, / na-adresy, / adresy, / tematy, / załączniki, / foldery , / tags, / category, / labels, et al.
Ten samouczek stanowi doskonały przykład zasobów, do których istnieją odsyłacze.
http://www.peej.co.uk/articles/restfully-delicious.html
Jest to najczęstszy wzorzec dla danych generowanych automatycznie. Na przykład nie publikujesz identyfikatora URI, identyfikatora ani daty utworzenia nowego zasobu, ponieważ są one generowane przez serwer. Mimo to możesz odzyskać identyfikator URI, identyfikator lub datę utworzenia po odzyskaniu nowego zasobu.
Przykład w Twoim przypadku danych binarnych. Na przykład chcesz opublikować dane binarne jako zasoby podrzędne. Gdy otrzymasz zasób nadrzędny, możesz przedstawić te zasoby podrzędne jako te same dane binarne lub jako identyfikatory URI, które reprezentują dane binarne.
Formularze i parametry są już inne niż reprezentacje HTML zasobów. Publikowanie parametru binarnego / pliku, którego wynikiem jest adres URL, nie jest rozciągnięte.
Kiedy otrzymujesz formularz dla nowego zasobu (/ comic-book / new) lub otrzymujesz formularz do edycji zasobu (/ comic-book / 0 / edit), prosisz o specyficzną dla formularza reprezentację zasobu. Jeśli wyślesz go do kolekcji zasobów z typem zawartości „application / x-www-form-urlencoded” lub „multipart / form-data”, poprosisz serwer o zapisanie reprezentacji tego typu. Serwer może odpowiedzieć zapisaną reprezentacją HTML lub jakąkolwiek inną.
Możesz również zezwolić na wysłanie reprezentacji HTML, XML lub JSON do kolekcji zasobów, do celów API lub podobnych.
Możliwe jest również przedstawienie zasobów i przepływu pracy zgodnie z opisem, biorąc pod uwagę okładki opublikowane po komiksie, ale wymagające, aby komiksy miały okładkę. Przykład w następujący sposób.
- Umożliwia opóźnione tworzenie okładek
- Umożliwia tworzenie komiksów z wymaganą okładką
- Umożliwia odsyłacze do okładek
- Umożliwia wiele osłon
- Utwórz szkic komiksu
- Twórz projekty okładek komiksów
- Opublikuj szkic komiksu
GET / comic-books
=> 200 OK, pobierz wszystkie komiksy.
GET / comic-books / 0
=> 200 OK, Pobierz komiks (id: 0) z okładkami (/ okładki / 1, / okładki / 2).
GET / comic-book / 0 / cover
=> 200 OK, Zdobądź okładki do komiksu (id: 0).
GET / cover
=> 200 OK, pobierz wszystkie okładki.
GET / cover / 1
=> 200 OK, zdobądź okładkę (id: 1) z komiksem (/ comic-book / 0).
GET / comic-books / new
=> 200 OK, Uzyskaj formularz do stworzenia komiksu (formularz: POST / draft-comic-book).
POST / draft-comic-book
title = foo
author = boo
publisher = goo Published
= 2011-01-01
=> 302 Znaleziono, lokalizacja: / draft-comic-books / 3, Przekierowanie do wersji roboczej komiksu (id: 3) z okładki (binarne).
GET / draft-comic-books / 3
=> 200 OK, pobierz szkic komiksu (id: 3) z okładkami.
GET / draft-comic-books / 3 / cover
=> 200 OK, Zdobądź okładki do szkicu komiksu (/ draft-comic-book / 3).
GET / draft-comic-books / 3 / cover / new
=> 200 OK, Uzyskaj formularz tworzenia okładki szkicu komiksu (/ draft-comic-book / 3) (formularz: POST / draft-comic-books / 3 / okładki).
POST / draft-comic-books / 3 /
cover_type = front
cover_data = (binary)
=> 302 Znalezione, Lokalizacja: / draft-comic-books / 3 / covery, Przekierowanie do nowej okładki szkicu komiksu (/ draft-comic -book / 3 / okładki / 1).
GET / draft-comic-books / 3 / publisher
=> 200 OK, Pobierz formularz do opublikowania wersji roboczej komiksu (id: 3) (formularz: POST / Published-comic-books).
POST / opublikowany-
tytuł -komiksu = foo
autor = boo
wydawca = goo
opublikowany = 2011-01-01
cover_type = front
cover_data = (binary)
=> 302 Znaleziono, lokalizacja: / comic-books / 3, przekierowanie do opublikowanego komiksu (id: 3) z okładkami.