Rozważmy następującą relację między dwoma zasobównarażając REST punkty końcowe dla jednego do wielu relacji
- College ma wiele Wydziały
- Wydział należą do College
Oczywiście Wydział nie jest tutaj zasobem pierwszej klasy.
Teraz potrzebuję punktów końcowych dla następujących operacji.
- Utwórz nowy wydział w tej uczelni tej farmy. Jeden z możliwych sposobów na zrobienie tego w dwóch operacjach.
POST /faculties/
PUT /college/1/faculties
- Usuwanie wykładowców z tej uczelni. Ponownie dwie operacje
GET /college/1/faculties
: Lista skojarzonych zdolności. Każdy będzie zawierał własny adres URL, taki jak/faculties/1
.DELETE /college/1/faculties/1
: Adres URL wygląda lepiej, ale jak wyświetlić ten adres URL?
- Dodaj jedno lub więcej wydziałów w ramach tej uczelni.
PUT /college/1/faculties
który akceptuje pełną listę wydziałów tej uczelni.
- Usuń ten konkretny sektor w całości.
DELETE /sectors/1
: Wygląda dobrze, ale musi dbać o pamięć podręczną/faculties/1/sectors
.
Co byłoby lepszym rozwiązaniem w tym przypadku? Czytałem o wystawianiu zasobów członkowskich, ale z takim podejściem, jeśli szkoła ma 10 wydziałów, to zajmie 10 osobnych połączeń http, aby uzyskać wszystkie z członkostw.
Co więcej, jest to tylko niewielka część pełnego drzewa relacji. W tym celu sięgają dalej, twierdzą, że system ma
- wydziałów ma wiele wydziałów
- dział ma wiele laboratoriów itd.
Ponadto w architekturze RESTful klient nie powinien wypełniać adresów URL.
Jakieś sugestie?
Tak na marginesie, myślę, że powinno być spójne z wykorzystaniem liczby mnogiej - używasz pojedynczej dla uczelni, wydziałów i liczby mnogiej dla sektorów. Osobiście zawsze używam liczby pojedynczej, ponieważ podoba mi się ścieżka do nazwy zasobu. Nie ma większego znaczenia, co wybierasz, ale bądź konsekwentny. – justAnotherUser