Я пытаюсь применить HATEOAS к существующему приложению, и у меня возникают проблемы с моделированием входных данных формы, которые будут управляться ответом API.
Приложение позволяет искать и регистрировать соединения междудва места.Первая конечная точка позволяет искать соединения GET /connections?from={lat,lon}&to={lat,lon}&departure={dateTime}
и возвращает следующую полезную нагрузку (тело ответа).
[
{
"id": "aaa",
"carrier": "Fast Bus",
"price": 3.20,
"departure": "2019-04-05T12:30"
},
{
"id": "bbb",
"carrier": "Airport Bus",
"price": 4.60,
"departure": "2019-04-05T13:30"
},
{
"id": "ccc",
"carrier": "Slow bus",
"price": 1.60,
"departure": "2019-04-05T11:30"
}
]
Чтобы сделать заказ на одно из соединений, клиент должен сделать запрос POST /orders
содна из следующих полезных нагрузок (тело запроса):
- требуется электронная почта
{
"connectionId": "aaa",
"email": "passenger@example.org"
}
- требуется электронная почта и номер рейса (перевозчик обрабатывает только соединения aiprort)
{
"connectionId": "bbb",
"email": "passenger@example.org",
"flightNumber": "EA1234"
}
- требуемый номер телефона
{
"connectionId": "ccc",
"phoneNumber": "+44 111 222 333"
}
Полезная нагрузка различна, поскольку разные операторы могут обрабатывать разные соединения, и для каждого из них может потребоваться различный набор информации.Я хотел бы сообщить клиенту API, какие поля обязательны при создании заказа.У меня вопрос, как мне сделать это с HATEOAS?
Я проверил различные спецификации, и это то, что я могу сказать, прочитав спецификации:
- HAL & HAL-FORMS Есть
"_templates"
, но в самом шаблоне нет URI.Предполагается, что он работает с собственной связью, которая в моем случае будет / connections ... , а не / orders . - JSON-LD Я не смог найти ничего о поддержке форм или шаблонов.
- JSON-API Я не смог ничего найти о поддержке форм или шаблонов.
- Коллекция+ JSON Существует не более одного
"template"
на документ, поэтому предполагается, что все элементы коллекции имеют одинаковые поля, что не так в моем приложении. - Сирена Похоже,
"actions"
подходит для моего варианта использования, но проект кажется мертвым и нет поддерживаемых библиотек для многих основных языков. - CPHL Проект кажется мертвым, очень мало документациии никаких библиотек.
- Ion Есть хорошая поддержка форм, но я не смог найти какие-либо вспомогательные библиотеки.Похоже, на данный момент это всего лишь спецификация.
Является ли такая распространенная проблема, что формы, управляемые API, все еще не решены с помощью спецификаций и инструментов?