Как получить доступ к подресурсу в REST API без использования уникального идентификатора? - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно получить доступ к подресурсу ресурса, не используя реальный уникальный идентификатор этого ресурса.

Насколько я понял, вы используете Path-Variables для уникальных идентификаторов и Request-Params для фильтрации.

Если бы я использовал уникальный идентификатор, URI мог бы выглядеть следующим образом:

/cars/47/engine/name

Однако, если я хочу получить название двигателя автомобиля по цвету автомобиля,Я не уверен, как это сделать.Поскольку цвет был бы фильтром, запрос должен выглядеть примерно так:

/cars?color=red/engine/name

Но мне это кажется странным, или это на самом деле обычный способ сделать это?

* 1012И, кроме того, как бы я использовал несколько свойств ресурса в качестве уникального идентификатора?Представьте, что у меня есть приложение, в котором я могу идентифицировать человека по его имени, фамилии и стране, в которой он родился. Могу ли я связать их вместе так:
/persons/JoeWatsonSpain

Или я не смогуиспользовать его как реальный уникальный идентификатор и вместо этого использовать логику фильтра?

/persons?firstname=Joe&sirname=watson&country=spain

1 Ответ

0 голосов
/ 19 июня 2019

«Но это выглядит странно для меня (/cars?color=red/engine/name) или это действительно обычный способ сделать это?»

Нет.Этот дизайн API неверен.В соответствии с RFC3986 :

Компонент запроса обозначается первым знаком вопросительного знака ("?") И оканчивается символом числа ("#") или символомконец URI.

Таким образом, вы не можете использовать запрос (или предыдущий термин в RFC1738, «searchpart») и заканчивать его /.

.путь будет выглядеть следующим образом:

/cars/engine/name?carColor=red

«Как использовать несколько свойств ресурса в качестве уникального идентификатора?»

Есть 2 варианта (возможно, больше):

  1. "Цепи их вместе", с вашим собственным отдельным правилом.Например: /persons/Joe_SP_Watson_SP_Spain
  2. Используйте запрос, как вы упомянули.Например, /persons?firstname=Joe&sirname=watson&country=spain

Лично я предпочитаю второе решение, которое легче понять и легче поддерживать.

...