REST числовые или строковые идентификаторы ресурсов?
====================================================

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

Если у меня есть пользователь в системе, лучше ли идентифицировать пользователя с помощью числового идентификатора

/users/1

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

/users/RSmith

Я вижу гипотетические потенциальные плюсы и минусы каждого подхода, строковые идентификаторы более удобочитаемы, менее обнаружимы (не могут быть увеличены для поиска действительных пользователей) и не требуют сохранения другого числового идентификатора в базе данных (я бы не стал) хотите выставить идентификаторы базы данных через API). Числовые идентификаторы не имеют внутреннего значения и поэтому могут быть гарантированно неизменными, тогда как с помощью строкового идентификатора пользователь может захотеть переименовать ресурс, тем самым изменив URI ресурса.

Есть ли здесь передовая практика REST или лучший подход зависит от системы к системе? Если последнее, есть ли дополнительные плюсы и минусы, связанные с каждым методом?

Как известно, строго говоря, между этими двумя подходами нет преимуществ. Да, идентификаторы строк могут быть проще для запоминания, но, кроме того, REST не применяет "довольно" URL-адреса (или идентификаторы), потому что большую часть времени URL-адреса доступны для программ, следующих по гиперссылкам.

Таким образом, удобные для пользователя URL-адреса должны использоваться только для начальной загрузки ресурсов, которые могут запомнить люди. Кроме того, угадывание идентификатора не должно быть проблемой, потому что либо:

You have to restrict access to URLs based on any authentication method, or:
You have to use randomized/unguessable URLs that are not "public".

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



 / users / RSmith состоит в том, что он более дружественный для человека. С точки зрения RESTfull это не имеет значения, поскольку оба являются допустимыми идентификаторами ресурса. Все остальное зависит от требований вашей системы.