如何在将其余部分转发到现有的GraphQL服务器时“模拟”一些GraphQL请求?

时间:2017-12-30 14:01:42

标签: graphql apollo apollo-server absinthe

问题:有没有办法模拟一些GraphQL类型/查询/突变/订阅,同时将其余部分“转发”到现有的GraphQL服务器?

情况:应用程序有一个模式,其中一部分已在服务器上实现,其余部分尚未开发。在前端工作有时会产生对后端团队的依赖,我正试图解决这个问题。

目标设置:有问题的设置应该将所有请求“转发”到现有的GraphQL服务器,但我想要模拟的除外。因此,对于已在服务器上实现的部件(例如,用户身份验证),使用实际服务器,而对于尚未在服务器上实现的部件,我可以使用模拟响应。

我尝试过搜索,当我找到创建模拟GraphQL服务器的方法时,我找不到这样做的东西。

我愿意编写一些代码来实现这一目标,但对于GraphQL来说是新手,我想先问一下这个问题会给我一些有用的指针来解决这个问题。

Fwiw,前端使用Apollo GraphQL(使用React),后端使用Absinthe(使用Elixir / Phoenix)

2 个答案:

答案 0 :(得分:0)

{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/

答案 1 :(得分:0)

也许您可以使用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添加查询/变异的响应