Ho una gerarchia di oggetti che devo esporre tramite un'API RESTful e non sono sicuro di come dovrebbero essere strutturati i miei URL e cosa dovrebbero restituire. Non sono riuscito a trovare best practice.
Diciamo che ho cani e gatti che ereditano da animali. Ho bisogno di operazioni CRUD su cani e gatti; Voglio anche poter fare operazioni sugli animali in generale.
La mia prima idea era di fare qualcosa del genere:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Il fatto è che la collezione / animals ora è "incoerente", in quanto può tornare e prendere oggetti che non hanno esattamente la stessa struttura (cani e gatti). È considerato "RESTful" avere una raccolta che restituisce oggetti con attributi diversi?
Un'altra soluzione sarebbe creare un URL per ogni tipo concreto, come questo:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
Ma ora il rapporto tra cani e gatti è perso. Se si desidera recuperare tutti gli animali, è necessario interrogare le risorse del cane e del gatto. Anche il numero di URL aumenterà con ogni nuovo sottotipo di animale.
Un altro suggerimento è stato quello di aumentare la seconda soluzione aggiungendo questo:
GET /animals # get common attributes of all animals
In questo caso, gli animali restituiti conterrebbero solo attributi comuni a tutti gli animali, eliminando attributi specifici del cane e del gatto. Ciò consente di recuperare tutti gli animali, anche se con meno dettagli. Ogni oggetto restituito potrebbe contenere un collegamento alla versione dettagliata e concreta.
Eventuali commenti o suggerimenti?