Подтвердить что ты не робот

Идентифицировать элемент с помощью идентификатора или пули в RESTful API

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

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

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

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

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

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

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?

4b9b3361

Ответ 1

Из трех я предпочитаю третий вариант, это не редкость видеть этот синтаксис; например части API Twitter позволяют использовать этот синтаксис: https://dev.twitter.com/rest/reference/get/statuses/show/id

Четвертый вариант - это гибридный подход, в котором вы выбираете один (например, ID) в качестве типичного метода доступа для отдельных элементов, а также разрешаете запросы на основе пули. Например:.

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

Ваша маршрутизация будет очевидной картой /items/id в/items? id =

Расширяется до нескольких идентификаторов /slugs, но по-прежнему отвечает парадигме REST совпадающих URI с базовой моделью данных.