是否有人成功将Hasura GraphQL端点放置在Apollo联合网关的后面?我知道Hasura要作为联盟的地步,但我宁愿不这样做...目前的想法是创建一个阿波罗服务器与远程模式连接Hasura,然后但该 beind网关...寻找任何关于这是否可能的想法或指导?
我很想说这不是因为我看不到任何尝试过的人。我不确定Hasura端点是否允许。以这种方式联合“自己”。
我已经开始了该过程,但是最初无法获得带有远程方案的Express Apollo服务器来连接到Hasura端点,所以一个较小的问题是这是否可能。
干杯。
可以使用简单的解决方法将Hasura安装在阿波罗网关[1]上。基本要求是_service
在graphql模式[2]中有一个称为的字段。该_service
字段不过是Schema Definition Language
(SDL)格式的Hasura模式。
您可以query
使用“远程模式[3]” 将此字段添加到您的类型中。这是一个示例远程模式:
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;
您可以使用许多社区工具(包括graphql-js [4]或graphqurl [5])自动获取Hasura模式的SDL。
此处发布了一个完全自动化的示例:https : //gist.github.com/tirumaraiselvan/65c6fa80542994ed6ad06fa87a443364
注意:apollo-gateway当前不支持subscriptions
[6],因此您需要subscription
从schema root
生成的SDL中删除该字段,否则会引发奇怪的错误。
这仅允许通过阿波罗网关为Hasura提供服务,并不意味着它启用了联盟功能。
https://www.apollographql.com/docs/apollo-server/federation/federation-spec/#fetch-service-capabilities
https://docs.hasura.io/1.0/graphql/manual/remote-schemas/index.html
https://graphql.org/graphql-js/utilities/#printintrospectionschema
https://github.com/hasura/graphqurl#export-schema
https://github.com/apollographql/apollo-server/issues/2360#issuecomment-531849628