HATEOAS и формы, управляемые API - PullRequest
4 голосов
/ 23 марта 2019

Я пытаюсь применить 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?

Я проверил различные спецификации, и это то, что я могу сказать, прочитав спецификации:

  1. HAL & HAL-FORMS Есть "_templates", но в самом шаблоне нет URI.Предполагается, что он работает с собственной связью, которая в моем случае будет / connections ... , а не / orders .
  2. JSON-LD Я не смог найти ничего о поддержке форм или шаблонов.
  3. JSON-API Я не смог ничего найти о поддержке форм или шаблонов.
  4. Коллекция+ JSON Существует не более одного "template" на документ, поэтому предполагается, что все элементы коллекции имеют одинаковые поля, что не так в моем приложении.
  5. Сирена Похоже, "actions" подходит для моего варианта использования, но проект кажется мертвым и нет поддерживаемых библиотек для многих основных языков.
  6. CPHL Проект кажется мертвым, очень мало документациии никаких библиотек.
  7. Ion Есть хорошая поддержка форм, но я не смог найти какие-либо вспомогательные библиотеки.Похоже, на данный момент это всего лишь спецификация.

Является ли такая распространенная проблема, что формы, управляемые API, все еще не решены с помощью спецификаций и инструментов?

...