Я разрабатываю услугу REST, и я стараюсь придерживаться конвенций и рекомендаций доктора Роя Филдинга.REST Resource path design
Я представляю свою службу как конечную точку, которая предоставляет набор ресурсов. Ресурс идентифицируется с помощью URI, и клиенты api могут манипулировать ресурсами с использованием семантики HTTP (то есть различные глаголы HTTP сопоставляются с соответствующими операциями над URI).
Руководящие принципы указывают, что эти URI должны быть определены иерархическим способом, отражающим иерархию объектов. Это полезно для создания ресурсов, потому что на бэкэнд нам нужны данные для выполнения операции создания. Однако при дальнейших манипуляциях большая часть информации, включенной в URI, даже не будет использоваться службой, потому что, как правило, одного только идентификатора ресурса достаточно, чтобы однозначно идентифицировать цель операции.
Пример: рассмотрим Api, который раскрывает создание и управление продуктами. Учтите также, что продукт связан с брендом. О создании это имеет смысл, что следующее действие выполняется: HTTP POST/марка/{Brand_ID}/Продукт [Тело, содержащее вход, необходимое для создания продукта]
Создание возвращает HTTP 201, созданный с заголовок местоположения, который раскрывает местоположение вновь созданного продукта.
О дальнейших манипуляций, клиенты могут получить доступ к устройству, выполнив: HTTP PUT/марка/{Brand_ID}/продукта/{product_id} HTTP DELETE/марка/{Brand_ID}/Product/{PRODUCT_ID} и т.д.
Однако, поскольку идентификатор продукта является универсальным в области продукта, следующие манипуляции могут выполняться следующим образом: /Product/{product_id} Я придерживаюсь префикса/Марка/{brand_id} по причинам согласованности. Фактически, идентификатор бренда игнорируется службой. Вы считаете, что это хорошая практика, и разумно для поддержания четкого, однозначного определения ServiceInterface? Каковы преимущества этого, и так ли это вообще?
Также будут оценены любые указатели на лучшие практики определения URI.
Заранее спасибо
Кажется, что ваше предложение таково: сохраните свой путь ресурса простым и включите ссылки в каждом из членов ресурса. Вы имеете дело только с случаем Get. Как бы вы создали новый продукт? I.e., кто бы вы указали на момент создания, какой производитель связан с новым продуктом? Включить его в тело запроса? Это звучит не так. Похоже, что эта информация должна быть включена в URI ресурса. –
. Ссылки будут включены в тело запроса, поскольку это представление этого ресурса. Вам необходимо будет провести надлежащие проверки с органом запроса, чтобы убедиться, что Производитель и Бренд действительно существуют. –