Graphql - Apollo 服务器 - 热更新模式

Posted

技术标签:

【中文标题】Graphql - Apollo 服务器 - 热更新模式【英文标题】:Graphql - Apollo Server - Hot update schema 【发布时间】:2018-06-23 23:16:39 【问题描述】:

我希望在我的 apollo-server-express 服务器上热重载我的 GraphQL 架构。任何人都知道如何做到这一点?

我目前正在使用模式拼接来收集多个 API 的模式,但是我不希望每次这些模式之一发生更改时都必须重新启动我的应用程序。

我试图寻找快速路线并将其删除,但它不起作用,我还尝试在同一条路线上再次致电 graphQLExpress() 并且没有更新它。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我设法通过删除快速路由然后重新创建它来完成它。但实际上我发现因为makeRemoteExecutableSchema 在每个请求中都发送自省查询,所以您实际上不需要更新您的架构,它会自行更新。但这并不意味着 Graphiql。

【讨论】:

【参考方案2】:

我深入研究了graphqlExpress 调用,它相当轻量级,只是使用提供的模式返回一个中间件函数。我能够通过包装它来确保它始终使用我的最新模式:

let schema = createSchema();
app.use('/graphql', bodyParser.json(), function(req, res, next) 
  // ensure latest schema is always passed in, we'll reload it automatically
  const graphql = graphqlExpress( schema );
  graphql(req, res, next);
);

我目前正在使用本地/静态架构,因此文件观察器允许我根据需要在此处更新 schema

【讨论】:

听起来不错,我将尝试使用间隔调用我的模式拼接函数。 ?? 你是对的,它正在工作,所以我最终做的是拥有另一个我可以调用的端点,它通过重新生成不同的模式来覆盖模式变量。我还尝试过一段时间来进行“自动刷新”,它也可以工作。谢谢,这是一个很好的解决方案!

以上是关于Graphql - Apollo 服务器 - 热更新模式的主要内容,如果未能解决你的问题,请参考以下文章

更新 apollo 缓存而不调用 graphql 服务器(apollo v3.3)

GraphQL,Apollo 服务器联合模式

使用 Express-GraphQL 和 React-Apollo 订阅 GraphQL

如何使“apollo 服务器”与 graphql schemaObject 一起使用?

从服务器下载文件的 GraphQL/Apollo 应用程序

使用 apollo-federation 独立构建 GraphQL 服务