【问题标题】:How to 'mock' some GraphQL requests while forwarding the rest to an existing GraphQL server?如何“模拟”一些 GraphQL 请求,同时将其余请求转发到现有的 GraphQL 服务器?
【发布时间】:2018-06-10 14:30:16
【问题描述】:

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

情况:应用程序有一个架构,其中一部分已经在服务器上实现,其余的还有待开发。在前端工作有时会产生对我试图解决的后端团队的依赖。

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

我尝试过搜索,虽然我找到了创建模拟 GraphQL 服务器的方法,但我找不到这样的方法。

我愿意编写一些代码来实现这一点,但我是 GraphQL 的新手,我想先问这个问题会给我一些关于如何解决这个问题的有用指示。

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

【问题讨论】:

  • 合并两个 GraphQL 服务器称为“模式拼接”。在你开始之前(剧透警告:这并不容易)看看graphql-faker。它可能涵盖 90% 的工作所需的 10% 的工作。除了拼接之外,您还可以尝试仅实现 GraphQL 接口并添加假解析器。在我们的服务器中,我们使用处理 JSON 数据的假模型来尽快将 一些 API 传递到前端。
  • @Herku 谢谢! graphql-faker 看起来很有帮助

标签: graphql apollo apollo-server absinthe


【解决方案1】:

'graphql-tools' 导入{mockServer}。 模拟模式:

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/

【讨论】:

    【解决方案2】:

    也许你可以使用easygraphql 来解决这个挑战!!有多个包可以使用:

    1. easygraphql-now:您可以在package.json 上创建一个脚本,该脚本将运行"easygraphql-now schema.gql --graphiql --local -p=7000",您可以在其中传递架构路由、本地和graphiql 标志以及端口……所以当您运行它时;它将创建传递模式的模拟服务器,因此您的应用程序将向服务器发出请求,该服务器将响应您的查询/突变的模拟。

    2. easygraphql-mock:如果你想返回一个完整的类型的mock,你可以使用这个包,这样你就不用为每个类型创建fixture了。

      李>
    3. easygraphql-tester:类似于easygraphql-mock,不同的是可以返回查询的模拟,检查docs

    因此,您可以选择哪些路由应该向easygraphql-now 发出请求,或者只是使用easygraphql-tester 添加查询/突变的响应

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2021-06-16
      • 1970-01-01
      • 2022-10-12
      • 2020-10-23
      • 2020-05-26
      • 2019-07-23
      • 2019-11-04
      • 2017-08-24
      相关资源
      最近更新 更多