Как «имитировать» некоторые запросы GraphQL, перенаправляя остальные на существующий сервер GraphQL?

Вопрос: Есть ли способ имитировать некоторые типы / запросы / мутации / подписки GraphQL, «перенаправляя» остальные на существующий сервер GraphQL?

Ситуация: у приложения есть схема, часть которой реализована на сервере, а остальная еще предстоит разработать. Работа над интерфейсом иногда создает зависимость от серверной команды, которую я пытаюсь решить.

Настройка цели: рассматриваемая настройка должна «пересылать» все запросы на существующий сервер GraphQL, кроме тех, которые я хочу имитировать. Таким образом, для частей, которые были реализованы на сервере (например, аутентификации пользователя), используется фактический сервер, а для частей, которые не были реализованы на сервере, я могу использовать имитированные ответы.

Я пробовал искать, и хотя я нашел способы создать фиктивный сервер GraphQL, я не смог найти что-то, что делает это таким образом.

Я готов написать код, чтобы это произошло, но, будучи новичком в GraphQL, я подумал, что если спросить об этом в первую очередь, я получу несколько полезных советов о том, как с этим справиться.

Fwiw, интерфейс использует Apollo GraphQL (с React), а серверный интерфейс использует Absinthe (с Elixir / Phoenix)


person Kul    schedule 30.12.2017    source источник


Ответы (2)


импортировать {mockServer} из 'graphql-tools'. Смоделируйте схему:

import { mockServer } from 'graphql-tools';
import schema from './mySchema.graphql';

const myMockServer = mockServer(schema);
myMockServer.query(`{
  allUsers: {
    id
    name
  }
}`);
// returns
// {
//   data: {
//     allUsers:[
//       { id: 'ee5ae76d-9b91-4270-a007-fad2054e2e75', name: 'lorem ipsum' }, 
//       { id: 'ca5c182b-99a8-4391-b4b4-4a20bd7cb13a', name: 'quis ut' }
//     ]
//   }
// }

чтобы узнать больше о настройке фиктивных данных с помощью graphql, см. полные примеры на официальном сайте graphql: http://graphql.org/blog/mocking-with-graphql/

person toufek khoury    schedule 01.01.2018

Возможно, вам удастся решить эту проблему с помощью easygraphql !! Можно использовать несколько пакетов:

  1. easygraphql-now: вы можете создать сценарий на своем package.json, который будет запускать "easygraphql-now schema.gql --graphiql --local -p=7000" там, где вы передать маршрут схемы, локальный флаг и флаг graphiql, а также порт ... поэтому, когда вы его запустите; он создаст фиктивный сервер переданной схемы, поэтому ваше приложение отправит запрос на сервер, который ответит имитацией вашего запроса / мутации.

  2. easygraphql-mock: если вы хотите вернуть полный макет типа, вы можете используйте этот пакет, и с ним вам не нужно создавать приборы для каждого типа.

  3. easygraphql-tester: он похож на easygraphql-mock, но с той разницей, что вы можете вернуть макет запроса, проверьте docs

Таким образом, вы можете выбрать, какие маршруты должны отправлять запрос к easygraphql-now или просто добавить ответ на запрос / изменение с помощью easygraphql-tester

person alejandro estrada    schedule 03.12.2018