В настоящее время мы разрабатываем REST API для доступа к классическим данным клиентов. Одним из элементов API являются активы пользователя. Активы добавляются в рамках данной услуги. Внутренний API добавит ресурс только пользователю в рамках данной службы. Таким образом, нет отношения Пользователь - Актив, но есть отношение Пользователь - [Сервис] - Актив.
Наши URI будут выглядеть так:
/users/{id}/assets/{id}/services/{id}
Использование API будет знать идентификатор ресурса и идентификатор службы для создания новой записи. То, с чем мы боремся, это создание этого отношения.
Одним простым способом было бы опубликовать все отношение к /users/{id}/assets/
POST /users/{id}/assets
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}
но тогда мы на самом деле не создаем актив, как может указывать URI, но отношение актив-сервис.
В качестве альтернативы, мы рассматриваем POST'ing для URI, адресующего отношение, например:
POST /users/{id}/assets/{id}/service/{id}
{attribute1:"{var}", attribute2:"{var}"}
Но в этом случае путь ресурса /users/{id}/assets/{id}
не будет существовать до POST и будет создан как побочный эффект.
POST'ing к пути ресурса, который еще не существует вообще?
Спасибо за ваши мысли,
Джерард.
источник
Здесь есть несколько моментов: во-первых: вы не должны ставить идентификатор при создании нового ресурса, так как этот идентификатор может уже существовать, или это может быть система, использующая определенный метод для генерации идентификатора, и вы заставляете его использовать свой, и для Предположим, что идентификатор должен быть создан системой, атрибут заголовка местоположения должен быть установлен в случае ресурса создания, чтобы получить обратную связь с сгенерированным идентификатором.
Второе: ваш JSON неверен, вам приходится иметь дело со службой как с другим объектом внутри объекта актива, так же как и с сервисами URI ресурса, вы должны обращаться с ним как с массивом.
должно быть:
Если вы собираетесь использовать этот способ
В-третьих: я не предпочитаю использовать этот способ для разработки проекта, если этот случай потерпел неудачу, как вы могли знать, что он потерпел неудачу при создании актива или услуги,
источник
Вот другая линия мысли:
Таким образом, вы определяете отношения как трехстороннюю связь между активом, сервисом и пользователем и не подразумеваете никаких иерархических отношений
Затем вы можете получить конкретные отношения с помощью:
или искать подмножество отношений по:
или
Оригинальный способ не ошибается, но этот подход может дать вам больше гибкости в отношении того, к кому он привык.
источник