Projektuję interfejs API usługi REST i utknąłem na właściwej drodze do zagnieżdżania zasobów.
Zasoby: partnerzy, bilety, ustawienia
Połączenia między zasobami:
- partner ma wiele biletów,
- partner ma ustawione ustawienia,
Logika biznesowa:
- możesz wymienić wszystkich partnerów jako anonimowych użytkowników,
- możesz dodać nowy bilet do określonego partnera jako użytkownik anonimowy,
- tylko partner może wymienić swoje bilety,
- tylko partner może modyfikować swoje bilety,
- tylko partner może wymienić ustawienia,
- tylko partner może modyfikować ustawienia,
Co robiłem do tej pory:
Zasoby partnerów
GET / partnerzy - lista wszystkich partnerów
GET / partners /: id - pokaż szczegóły partnera określonego przez: id parametr
GET / partners /: partner_id / bilety - lista biletów partnera
GET / partnerzy /: partner_id / bilety /: id - szczegóły biletu określonego partnera
POST / partnerzy /: identyfikator_partnera / bilety - zapisuje nowy bilet
PUT / partnerzy /: identyfikator_partnera / bilety /: id - aktualizuje bilet określony przez: identyfikator parametru
GET / partnerzy /: identyfikator_partnera / ustawienia - ustawienia listy partnera
PUT / partners /: partner_id / settings - zaktualizuj ustawienia partnera
Problem / pytanie
Czy byłby właściwy sposób na dzielenie zagnieżdżonych zasobów (biletów, ustawień) w celu oddzielenia zasobów lub duplikowania ich jako oddzielnych zasobów?
Na przykład
GET / bilety /: id
POST / bilety
PUT / bilety /: id
GET / ustawienia
PUT / ustawienia
źródło
/partners/:partner_id/tickets
lista zawierała przydatne dane dla każdego biletu, a nie tylko kanoniczny identyfikator URI biletu. Na przykład w JSON może być[{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}]
, więc klient może natychmiast wyświetlić tabelę i GET / PUT pełne zasoby biletów w celu dodatkowej manipulacji.DELETE /tickets/:id
?