Apollo 联合网关后面的 Hasura GraphQL 端点

Hasura GraphQL Endpoint behind Apollo Federated Gateway

有没有人成功地将 Hasura GraphQL 端点放置在 Apollo Federated Gateway 后面?我知道 Hasura 想充当联合点,但我不想那样做...目前的想法是创建一个带有远程模式的 apollo 服务器来连接 Hasura,然后 that 在网关后面...寻找关于这是否可能的任何想法或指导?

我很想说这不是因为我看不到有人尝试过。我不确定 Hasura 端点是否允许。 "itself" 以这种方式联合。

我已经开始了这个过程,但最初无法获得带有远程方案的 Express Apollo 服务器来连接到 Hasura 端点,所以一个更小的问题是这是否可能。

干杯。

可以使用简单的解决方法将 Hasura 安装在 apollo-gateway [1] 上。基本要求是在您的 graphql 模式 [2] 中有一个名为 _service 的字段。 _service 字段只是 Schema Definition Language (SDL) 格式的 Hasura 模式。

您可以使用远程架构 [3] 将此字段添加到您的 query 类型中。这是一个示例远程模式:

const { ApolloServer } = require('apollo-server');
const gql = require('graphql-tag');
const hasuraSchema = require('./schema.js');

const typeDefs = gql`

  schema {
    query: query_root
  }

  type _Service {
    sdl: String
  }

  type query_root {
    _service: _Service!
  }

`;

const resolvers = {
    query_root: {
        _service: () =>  { return {sdl: hasuraSchema} },
    },
};

const schema = new ApolloServer({ typeDefs, resolvers });

schema.listen({ port: process.env.PORT}).then(({ url }) => {
    console.log(`schema ready at ${url}`);
});

这里的关键值是const hasuraSchema,它是SDL格式的Hasura模式,即

// schema.js

const hasuraSchema = `

# NOTE: does not have subscription field
schema {
  query: query_root
  mutation: mutation_root
}

type articles {
  id: Int!
  title: String!
}

type query_root {
 ...
}

type mutation_root {
 ...
}
`

module.exports = hasuraSchema;

您可以使用许多社区工具自动获取 Hasura 模式的 SDL,包括 graphql-js [4] 或 graphqurl [5]。

此处发布了一个完全自动化的示例:https://gist.github.com/tirumaraiselvan/65c6fa80542994ed6ad06fa87a443364

注意:apollo-gateway 目前不支持 subscriptions [6] 所以你需要从 schema root 在生成的 SDL 中,否则会抛出一个奇怪的错误。

  1. 这只允许通过 apollo-gateway 服务 Hasura,并不意味着它启用联合功能。
  2. https://www.apollographql.com/docs/apollo-server/federation/federation-spec/#fetch-service-capabilities
  3. https://docs.hasura.io/1.0/graphql/manual/remote-schemas/index.html
  4. https://graphql.org/graphql-js/utilities/#printintrospectionschema
  5. https://github.com/hasura/graphqurl#export-schema
  6. https://github.com/apollographql/apollo-server/issues/2360#issuecomment-531849628