首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无缝地迁移到Postgraphile (多个ApolloClient实例)

无缝地迁移到Postgraphile (多个ApolloClient实例)
EN

Stack Overflow用户
提问于 2018-10-22 04:42:51
回答 1查看 949关注 0票数 1

Postgraphile看起来非常方便,但是我已经在客户端和服务器端有了几十个查询和突变。

有什么方法可以将Postgraphile一片片地集成在一起,让我的旧GraphQL模式被手动描述呢?

所以,现在我有了以下初始化代码:

代码语言:javascript
复制
function createApolloLink(){
  return createHttpLink({
    uri: '/graphql',
    credentials: 'same-origin'
  });
}

function create(){
  return new ApolloClient({
    link: createApolloLink(),
    ssrMode: !process.browser, // eslint-disable-line
    cache: new InMemoryCache(),
    connectToDevTools: process.browser
  });
}

如何利用一个标准化存储(客户端)并连接到第二个API点,由Postgraphile驱动,例如/graphql2

EN

回答 1

Stack Overflow用户

发布于 2018-10-22 09:24:25

通常,您的GraphQL客户机不需要考虑这个问题--它应该在服务器端处理。

在服务器端,您可以使用许多技术来解决这个问题:

模式拼接

模式拼接是解决问题的一种直截了当的方法--将旧模式与PostGraphile模式合并;这样,当客户端与/graphql通信时,他们可以访问两个模式。然后,您可以将旧模式中的所有内容标记为废弃的,并逐步淘汰使用。但是,如果可以的话,我建议您使用PostGraphile插件.

PostGraphile插件

PostGraphile是围绕一个插件系统构建的,您可以使用类似makeExtendSchemaPlugin的东西将旧的GraphQL模式混合到PostGraphile模式中。这里记录了这一点:https://www.graphile.org/postgraphile/make-extend-schema-plugin/,但是如果您的旧类型/解析器是通过类似于graphql-tools的工具实现的,那么这可能是最简单的入门方式:

代码语言:javascript
复制
const { makeExtendSchemaPlugin, gql } = require('graphile-utils');

const typeDefs = gql`\
type OldType1 {
  field1: Int!
  field2: String
}
extend type Query {
  oldField1: OldType1
  oldField2: OldType2
}
`;

const resolvers = {
  Query: {
    oldField1(/*...*/) {
      /* old logic here */
    },
    //...
  },
};

const AddOldSchemaPlugin = makeExtendSchemaPlugin(
  build => ({
    typeDefs,
    resolvers,
  })
);

module.exports = AddOldSchemaPlugin;

这也将导致最好的性能,因为不应该增加延迟,您可以再次将遗留字段/突变标记为不推荐的。

模式委托

使用这种方法,您可以编写自己的新GraphQL模式,然后将其“委托”给其他GraphQL模式(遗留模式,以及由PostGraphile生成的模式)。这增加了一些延迟,但使您对GraphQL模式的最终形状有了更多的控制,尽管这种功能带来了很大的责任--如果您做了一个错误,那么您将不得不在很长一段时间内维护这个错误!就我个人而言,我更喜欢PostGraphile使用的生成模式方法。

但是,要回答您的问题,阿波罗链接具有“上下文”功能,允许您更改查询的执行方式。通常,这用于添加标题,但也可以使用它覆盖URI,以确定查询的去处。我自己从来没有这样做过,但如果有一个阿波罗链接,您可以使用它可以根据客户端指令,甚至是字段名自动切换,我也不会感到惊讶。

https://github.com/apollographql/apollo-link/tree/master/packages/apollo-link-http#context

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52922535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档