Na przykład mam podmioty: klient, raport. Klient może mieć wiele raportów i myślę, że punkt końcowy dla jednego zarządzania raportami powinien być zagnieżdżony w następujący sposób:
/clients/{client_id}/reports/{report_id}
Jeśli chodzi o wszystkie raporty jednego klienta, oczekuje się enpoint:
/clients/{client_id}/reports
Ale jak powinien wyglądać punkt końcowy dla uzyskania wszystkich raportów wszystkich klientów, aby interfejs API był spójny i dobrze zaprojektowany.
Moje podejście:
- (Widziałem to w niektórych aplikacjach Google) użyj „-” zamiast tego i parsuj jako „wszystkie”:
/clients/-/reports
Utrzymuje to ten sam format punktu końcowego, ale wygląda nieco nietypowo, nie można znaleźć żadnego kodu RFC, który sugerowałby w ten sposób.
- Utwórz osobny punkt końcowy tylko dla wszystkich raportów:
/reports
Ale aby uzyskać raporty klienta, nadal:
/clients/{client_id}/reports
- Refaktoryzuj punkty końcowe, aby „klient” nie był rodzicem, ale tylko parametrem filtru:
/reports?client={client_id}
- raporty jednego klienta
/reports
- raporty wszystkich klientów
W przypadku dodania nowego punktu końcowego do publikowania raportu dla konkretnego klienta, może to wyglądać brzydko, ponieważ będzie to żądanie POST z parametrem w adresie URL.
Czy są jakieś inne sugestie pomysłów?