Как можно сделать запросы и мутации GraphQL с сервера Apollo? - PullRequest
1 голос
/ 26 февраля 2020

У нас есть большой проект, который будет иметь большое количество различных источников данных / микросервисов - некоторые из них будут REST API, некоторые GraphQL. Мы хотим создать промежуточный слой между этими источниками данных и нашим конечным клиентом, который будет клиентом NextJS / React / Apollo. Apollo Server кажется хорошим выбором для этого - получать данные из разных источников данных / микросервисов и создавать единый API-интерфейс GraphQL, который будет использовать клиентская часть Apollo. Точно так же, когда нам нужно опубликовать данные из внешнего интерфейса, предоставьте интерфейс GraphQL, который будет либо отправлять REST API, либо GraphQL в источники данных.

Единственное, с чем я сталкиваюсь, это понимание того, как извлечь и отправлять данные с Apollo Server, когда исходный источник данных / микросервис имеет API-интерфейс GraphQL. Я просмотрел документацию Apollo Server для получения данных и не вижу, что я ищу - возможно, я упускаю это.

Как бы это сделать, если Apollo Server не предоставляет API для фактической выборки данных GraphQL? Использовать клиент Apollo на сервере Apollo?

Я уверен, что упускаю слепо очевидное, и буду признателен за любые подсказки!

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Я думаю, что вы ищете сервер шлюза GraphQL.

Проверьте эти ссылки -

https://www.apollographql.com/docs/apollo-server/federation/implementing/

https://www.apollographql.com/docs/apollo-server/features/schema-delegation/#example

Редактировать

Случай 1 - Если у вас есть микросервисы, написанные на Graphql, поэтому с помощью сервера шлюза apollo вы можете сшить всю схему из всех другие микросервисы в единую схему, которые могут быть использованы клиентом. Это легко настроить и управлять. Даже если в будущем вы захотите объединить ваши бэкэнды Graphql в одну схему, тогда будет легко масштабировать и управлять ими с минимальными изменениями.

Случай 2 - Если эти микросервисы являются сторонними, и вы не хотите объедините эти схемы в одну, после чего вы сможете использовать сервер Apollo (без шлюза) и написать распознаватели-обертки, которые выполняют внешний вызов.

Вы можете просто использовать fetch API, чтобы сделать сетевой вызов из ваших преобразователей. Создание запроса Rest легко, но создание сложных запросов Graphql (с использованием фрагментов) может быть затруднено в случае выборки.

Для вызовов отдыха - Вы можете использовать Apollo RestDataScource , чтобы сделать внешние вызовы отдыха. Он также поддерживает кэширование на сервере Apollo.

Для вызовов Graphql - вы можете использовать GraphqlDataSource или реализовать свой собственный способ, подобный этому.

1 голос
/ 26 февраля 2020

Звучит так, будто вы немного обдумываете вещи. Вы можете просто использовать Apollo Client в своем промежуточном слое для питания резолверов вашего сервера Apollo. Если не считать этого, серверы GraphQL должны отвечать на обычный POST с запросом в виде тела - вы даже можете использовать fetch для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...