Я рассматриваю реализацию типа «подписки» с использованием отправленных сервером событий в качестве резервного API.
С чем я борюсь, так это с интерфейсом, если быть более точным, с уровнем http такогооперация.
Проблема:
Использование собственного EventSource не поддерживает:
- Указание метода HTTP, "GET" используется по умолчанию.
- Включая полезную нагрузку (запрос GraphQL)
Пока # 1 неопровержим, # 2 можно обойти с помощью параметров запроса.
Параметры запроса имеют ограничение ~ 2000 символов (можно обсуждать), что делает их полагаться слишком хрупкими.
Решение, о котором я думаю, - это создать выделенную конечную точку для каждого возможного события.
Например: URI для события, представляющего завершенную транзакцию между сторонами:
/graphql/transaction-status/$ID
Будет преобразован в этот запрос на сервере:
subscription TransactionStatusSubscription {
status(id: $ID) {
ready
}
}
Проблемы с этим подходом:
- Необходимо добавить создание обработчика для каждого перевода URI-в GraphQL.
- Развертывание новой версии сервера
- Потеря гибкости, предлагаемой GraphQL -> Клиент должен контролировать запрос
- Отслеживать все конечные точки в базе кода (бэк-энд, фронт- конец, мобильный)
Возможно, мне больше не хватает проблем.
Возможно, есть какой-нибудь лучший подход, о котором вы можете подумать?Один из них позволил бы улучшить подход к предоставлению полезных данных запроса с использованием EventSource?