Идентификация элемента по идентификатору или ярлыку в RESTful API

В настоящее время я разрабатываю API и столкнулся с небольшой проблемой: Как должен выглядеть URL-адрес RESTful API, если вы должны иметь возможность идентифицировать элемент либо по идентификатору, либо по ярлыку?

Я мог бы придумать три варианта:

GET /items/<id>
GET /items/<slug>

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

GET /items/id/<id>
GET /items/slug/<slug>

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

GET /items?id=<id>
GET /items?slug=<slug>

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

GET /items?ids=<id:1>,<id:2>,<id:3>
GET /items?slugs=<slug:1>,<slug:2>,<slug:3>

Но у этого есть и обратная сторона: что, если кто-то захочет идентифицировать некоторые элементы, которые он хочет получить? с идентификаторами, а остальные со слагом? Смешать эти идентификаторы было бы непросто.

Какое решение этих проблемявляется лучшим и наиболее распространенным? Что вообще важно при разработке такого API?

26
задан Claudio Albertin 4 April 2012 в 19:45
поделиться