Создание веб-сервисов REST с вложенными коллекциями + коллекциями внутри записей

Я хотел бы создать веб-сервис REST, который бы обеспечивал:

  1. вложенные коллекции,
  2. коллекции внутри записей.

Вложенные коллекции будут использоваться для уточнения концепции от общего к частному, например:

/vehicles/road_vehicles/cars/AB-123-CD

Идея состоит в том, чтобы ограничить число понятий, появляющихся в корне веб-сервиса.

Коллекции внутри записей будут использоваться для доступа к частям записей, например:

/cars/AB-123-CD/engine/spark_plugs/1

может быть хорошим URI для первой свечи зажигания автомобиля с идентификатором "AB-123-CD". Вложенная коллекция имеет смысл всякий раз, когда удаление "контейнера" означает удаление всех его частей.

DELETE /cars/AB-123-CD

очевидно удалил бы:

/cars/AB-123-CD/engine/spark_plugs/1

и все другие части автомобиля (представьте, что машина была отправлена ​​в металлолом УДАЛЕНОМ).

Вопрос: хотя этот вид "чистых URI" является довольно распространенной необходимостью, существует ли какое-либо программное обеспечение, упрощающее создание такого веб-сервиса?

Кажется, что протокол публикации Atom (AtomPub) мог бы быть хорошим кандидатом, поскольку их видение веб-сервисов очень близко к тому, что я хочу, но, похоже, он не поддерживает вложенные коллекции.

1 ответ

Статья "Будущее разработки API: уровень оркестровки указывает на то, что API на основе запросов предоставляют власть запрашивающему разработчику, хотя эта возможность ограничена. Использование AtomPub вместе с параметрами запроса доступно вам в инструментах сборки AtomPub. Я нашел несколько примеров поиска "APIs Query-based", но не смог найти фактическое определение.

https://developers.google.com/google-apps/contacts/v3/#retrieving_contacts_using_query_parameters
http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Query_Related_Records_Map_Service_Dynamic_Layer/02r3000000nt000000/

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

Другие вопросы по тегам