Создание веб-сервисов REST с вложенными коллекциями + коллекциями внутри записей
Я хотел бы создать веб-сервис REST, который бы обеспечивал:
- вложенные коллекции,
- коллекции внутри записей.
Вложенные коллекции будут использоваться для уточнения концепции от общего к частному, например:
/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, которые представляют разные точки зрения на информацию?