2015-07-19 2 views
1

Я проектирование REST API и пытаюсь решить, что является более правильным способом возвратить один ресурс:Должен ли REST API выбирать идентификатор или поле имени?

/resource/{id} 

или

/resource/{name} 

Идентификатор будет неизменен, поэтому я думая, что было бы лучше выбрать его, но имя было бы более дружелюбным. Какова наилучшая практика? Я видел, как оба использовались до «в дикой природе».

ответ

2

В основном REST построен на вершине уникальных идентификаторов, таким образом:

GET /resources/{id}/ 

следует использовать. Однако нет ничего, что помешало бы сделать поле name уникальным (теперь оно ведет себя как простой старый идентификатор) и построит REST поверх этого уникального идентификатора.

Если это не то, что вам нужно, и name не может быть уникальным, то другой вариант заключается в реализации фильтрации через name:

GET /resources?name=<SOME_NAME> 

Он также должен быть resources (во множественном числе), так как это указывает на то, что есть коллекция под капотом.

+0

Спасибо, мы пошли с вашим предложением выбрать по id и разрешить фильтрацию по имени. –

+0

Уверен, приветствую :) – Opal

+1

Вы всегда должны выбрать синтетический ключ. Если вы использовали имя как уникальный идентификатор, вы накладываете ограничения на будущие версии вашего API - вы никогда не сможете сделать их не уникальными, и вам нужно будет начать возвращать 301, что может быть связано с производительностью для клиентов. –

1

/resource/{id} более технически корректен, но если бы это был я, я бы допустил и то, и другое. Предполагая, что names не может содержать ТОЛЬКО числа, а ids может быть ТОЛЬКО цифрами, вы можете легко обнаружить, что было поставлено и разрешено использовать. ;)

1

Является ли использование имени вместо этого практичным, сводится к вашему бизнес-кейсу.

Будет ли 'name' всегда быть уникальным? Или приложение будет иметь дело с несколькими случаями?

Важны ли «красивые» URL-адреса? В большинстве приложений, над которыми я работал, запросы используют уникальные идентификаторы, которые никогда не подвергаются конечному пользователю, поскольку они не имеют никакого коммерческого значения. Они являются суррогатными первичными ключами.

0

Это хороший вопрос .. это зависит от примера бизнес-примера, если api используется через cli, например, docker, тогда вы можете использовать удобные для пользователя идентификаторы, такие как имя Но как только он станет частью URL, у него есть ограничения, такие как ASCII (чтобы избежать кодирования url или потери удобочитаемости) только char и некоторая определенная длина, например 128 символов и т. д.

Смежные вопросы