2010-07-02 1 views
2

У меня есть уникальные ресурсы RESTful, которые могут быть идентифицированы только в системе с двумя атрибутами. То, что я хочу знать, - это то, что подходит для этой практики.Лучшая практика REST для доступа к ресурсу с использованием двух атрибутов

Ресурс идентифицирован с атрибутом id (который не является уникальным) и атрибутом имени (который также не является уникальным), однако комбинация обоих атрибутов уникальна.

В настоящее время наш URI выглядит так, но это не кажется правильным:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname 

Я думал, было бы лучше, чтобы объединить эти два свойства, такие как «FirstId-aname», как это кажется, чтобы описать постоянство ресурса. например так что вы получите URI:

http://www.domain.com/somepath/myresource/firstid-aname 

Или было бы лучше, чтобы сделать что-то вроде этого, что я видел еще где:

http://www.domain.com/somepath/myresource;firstid=1;secondid=aname 

Любые предложения будут с благодарностью. Thanks

ответ

3

Я думаю, что вы первый пример не так уж плох. Может быть, некоторые люди думают об этом как о не очень чистом из-за различных не-буквенно-цифровых символов. Довольно часто вы увидите что-то вроде этого:

http://www.domain.com/somepath/myresource/firstid/1/secondid/aname 

Однако с REST является архитектурой, а не стандарт вы можете сделать, как вы хотите. Лично я не думаю, что URI обязательно должны быть очень красивыми.

Редактировать прежде чем кто-то пожалуется: Конечно, это никогда не бывает плохо, если они есть. Большую часть времени они читаются и испускаются программами, которые не заботятся. Довольно URI лучше для отладки.

2

Для RESTx мы разрешаем определение «позиционных параметров» в URL-адресе. Таким образом, вы могли бы написать что-то вроде:

http://www.domain.com/somepath/myresource/1/aname 

Но у вас всегда есть возможность и просто указать обычные параметры запроса в URL, например, так:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname 

Какой вариант лучше всего работает для вас может зависеть на вид клиентских приложений, которые вы пишете. RESTx, например, не заставляет вас использовать тот или иной, вы можете использовать оба из них одновременно.

Но учтите следующее: некоторые веб-кеши и другие «умные» элементы веб-инфраструктуры имеют проблемы с параметрами в URL-адресе. Они могут игнорировать все после окончания пути (например, параметры запроса), и поэтому ресурс RESTful не кэшируется или иным образом обрабатывается правильно. Это может не быть проблемой в небольших организациях, но если ваш ресурс RESTful выставлен в Интернете, это то, что вы, возможно, захотите рассмотреть.

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