J'ai une hiérarchie d'objets que je dois exposer via une API RESTful et je ne sais pas comment mes URL doivent être structurées et ce qu'elles doivent renvoyer. Je n'ai trouvé aucune meilleure pratique.
Disons que j'ai des chiens et des chats héritant d'animaux. J'ai besoin d'opérations CRUD sur les chiens et les chats; Je veux aussi pouvoir faire des opérations sur les animaux en général.
Ma première idée était de faire quelque chose comme ça:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Le fait est que la collection / animals est désormais "incohérente", car elle peut retourner et prendre des objets qui n'ont pas exactement la même structure (chiens et chats). Est-il considéré comme "RESTful" d'avoir une collection renvoyant des objets ayant des attributs différents?
Une autre solution serait de créer une URL pour chaque type concret, comme ceci:
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
Mais maintenant, la relation entre les chiens et les chats est perdue. Si l'on souhaite récupérer tous les animaux, les ressources du chien et du chat doivent être interrogées. Le nombre d'URL augmentera également avec chaque nouveau sous-type d'animal.
Une autre suggestion était d'augmenter la deuxième solution en ajoutant ceci:
GET /animals # get common attributes of all animals
Dans ce cas, les animaux renvoyés ne contiendraient que des attributs communs à tous les animaux, laissant tomber des attributs spécifiques au chien et au chat. Cela permet de récupérer tous les animaux, mais avec moins de détails. Chaque objet retourné peut contenir un lien vers la version détaillée et concrète.
Des commentaires ou suggestions?