Relay 从哪里获取 GraphQL 的 Schema?

Posted

技术标签:

【中文标题】Relay 从哪里获取 GraphQL 的 Schema?【英文标题】:From where does Relay fetch the Schema of GraphQL? 【发布时间】:2017-09-07 17:38:21 【问题描述】:

我有一个正在运行的基于 GraphQL 的服务器,我能够使用 GraphiQL 对其进行正确测试。但我无法理解 Relay 的实现。

既然 GraphQL 是在服务端,那么它的 schema 是如何在客户端通过网络层传输到中继的呢?或者它是如何指向同一个 GraphQL 的?

【问题讨论】:

【参考方案1】:

这需要一些额外的工作。基本上,您必须将模式的序列化版本转储到服务器端的文件中,然后将该文件移动到客户端并在 babel 编译期间包含它。 Facebook 有一个 babel plugin 接收这个文件并将其构建到包中,以便 Relay 了解架构。

编辑:这是一个关于如何将模式文件转储到 JSON 的 sn-p

import  graphql   from 'graphql'
import  introspectionQuery, printSchema  from 'graphql/utilities'

/*
  generates json of our schema for use by relay
 */
export default function (schema) 
  return new Promise((resolve, reject) => 
    graphql(schema, introspectionQuery).then(result => 
      if (result.errors) 
        console.error(`ERROR introspecting schema: $result.errors`)
        reject(new Error(result.errors))
       else 
        resolve( json: result, graphql: printSchema(schema) )
      
    )
  )

在你获得它之后,你必须 npm install babel-relay-plugin 并将它包含在你的 babel 插件中(可能在 webpack 配置中,如果你正在使用它的话)。

【讨论】:

以上是关于Relay 从哪里获取 GraphQL 的 Schema?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL + Relay:如何执行重新获取授权?

GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组

GraphQL + Relay 现代片段给了我一系列空帖子

Graphql + Relay graphql-relay-js 依赖

从 Relay 中的动态组件获取片段

是否可以从 Relay 突变访问 GraphQL 验证错误?