У меня есть иерархия объектов, которую мне нужно раскрыть через RESTful API, и я не уверен, как должны быть структурированы мои URL-адреса и что они должны возвращать. Я не смог найти лучших практик.
Скажем, у меня есть собаки и кошки, унаследованные от животных. Мне нужны CRUD-операции собакам и кошкам; Я также хочу иметь возможность делать операции с животными в целом.
Первой моей идеей было сделать что-то вроде этого:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Дело в том, что коллекция / animals теперь «несовместима», так как она может возвращать и принимать объекты, которые не имеют точно такой же структуры (собаки и кошки). Считается ли "RESTful" иметь коллекцию, возвращающую объекты с разными атрибутами?
Другое решение - создать URL-адрес для каждого конкретного типа, например:
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
Но теперь отношения между собаками и кошками потеряны. Если кто-то хочет получить всех животных, необходимо запросить ресурсы собаки и кошки. Количество URL-адресов также будет увеличиваться с каждым новым подтипом животных.
Другое предложение заключалось в том, чтобы дополнить второе решение, добавив следующее:
GET /animals # get common attributes of all animals
В этом случае возвращенные животные будут содержать только атрибуты, общие для всех животных, без атрибутов, характерных для собак и кошек. Это позволяет получить всех животных, хотя и с меньшим количеством деталей. Каждый возвращаемый объект может содержать ссылку на подробную конкретную версию.
Есть комментарии или предложения?