У меня вопрос о том, как дизайн ресурса URI с составными ключами.REST - как дизайн URI с составными клавишами?
У меня есть ресурс, называемый грузом, который имеет 4 ключа/идентификаторы: идентификатор партнера, начальный индекс, окончательный индекс и вес.
На самом деле мой ресурс был разработан, чтобы иметь инкрементный идентификатор, генерируемый базой данных, но этот подход не очень хорошо для потребителей API, например, если потребитель/партнер должен обновить грузовую информацию, которую они должны сделать:
?GET грузовой initialZipcode = {VALUE} & finalZipcode = {VALUE} & вес = {VALUE}
отклик операции выше будет груз ID, так что, наконец, они могут обновить информацию:
PUT фрахт/{ID}
Идентификатор партнера подразумевается механизмом аутентификации.
Для меня кажется странным заставить партнеров получить идентификатор фрахта перед обновлением информации.
Так что мой вопрос: как я могу создать этот URI?
PUT грузовой/initialZipcode/{VALUE}/finalZipCode/{VALUE}/вес/{VALUE}
ли я рассмотреть вопрос о разработке выше?
Другой вопрос: является ли хорошая практика встроенным партнером в механизм аутентификации? Я знаю плюсы (простые для потребителей) и минусы (кеш, невозможность обмена URI и т. Д.), Но я не знаю, является ли вообще хорошей или плохой практикой.
Спасибо!
Привет, Даррел, спасибо за ваш ответ. Для меня ваш (первый) подход кажется странным, потому что всегда я использую концепцию ID, которую я использую не как параметр запроса, как вы показали. Для меня параметры запроса определяют дополнительные параметры в определенном ресурсе, такие как: фильтр, поиск, сортировка, разбивка на страницы и т. Д. У меня есть другие случаи в моем API для обновления ресурса, и во всех случаях я использовал идентификатор в URI (параметр пути), поэтому, если у меня есть другой случай, когда обновление связано с параметрами, мне кажется, что я нарушаю концепцию унифицированного интерфейса. Я ошибаюсь? – Krock
@Krock RFC 3986 утверждает, что параметры запроса являются частью идентификации ресурса. Это не дополнительные метаданные. Это было разъяснение, сделанное в предыдущей версии спецификации URI. http://tools.ietf.org/html/rfc3986#section-3.4 Клиент должен обрабатывать весь URI как непрозрачный идентификатор. –
Вы меня убедили :) Но в случае создания нового фрахта? Как я могу вернуть ответ? С идентификатором ответ будет «местоположением» для созданного фрахта (например, фрахт/идентификатор), но если у меня нет идентификатора, то какой ответ? Место для перевозки? InitialZipcode = {VALUE} & finalZipcode = {VALUE} & weight = {VALUE}? – Krock