多租户 GraphQL 服务器
Multitenant GraphQL Server
我们正在为我们的 SaaS 多租户服务探索 GraphQL 服务器,我们在单个多租户 GraphQL 服务器后面有多个微服务/服务。现在我们的情况是,客户可以通过我们的首选机制扩展他们的 GQL 模式;
那么有什么方法可以让我们仍然拥有一个 GQL 服务器,该服务器将通过多个端点为多个 GQL 模式提供服务?
或者我们必须在完全独立的服务器中部署每个客户端的 GQL 服务器 + 架构?
您可以让同一个应用程序提供多个模式。 GraphQL 模式甚至可以在运行时构建。也许你甚至可以使用 fastify GraphQL 中间件。对于更复杂的事情,您可能必须构建自己的中间件,但这完全有可能。
创建具有不同模式的多个端点很容易。您可以简单地挂载更多 GraphQL 中间件:
for (const customer of customers) {
app.register(graphqlFastify, {
prefix: '/' + customer.name + '/graphql',
graphql: {
schema: customer.schema,
},
});
}
但这可能无法很好地扩展。您可能想改用带参数的路由,然后自己执行 GraphQL 函数。也许,您可以将其与 graphql-helix:
结合使用
import { graphql } from 'graphql';
fastify.get('/:username/graphql', (request, reply) => {
const { queryString, variables, operationName } = getGraphQLParams(request);
const schema = getUserSchema(request.username);
return graphql(schema, queryString, rootVal, context, variables, operationName);
});
上面的所有代码都没有经过测试,我对 fastify 的了解还不足以创建工作代码。但我希望这显示了可能性。
我们正在为我们的 SaaS 多租户服务探索 GraphQL 服务器,我们在单个多租户 GraphQL 服务器后面有多个微服务/服务。现在我们的情况是,客户可以通过我们的首选机制扩展他们的 GQL 模式;
那么有什么方法可以让我们仍然拥有一个 GQL 服务器,该服务器将通过多个端点为多个 GQL 模式提供服务?
或者我们必须在完全独立的服务器中部署每个客户端的 GQL 服务器 + 架构?
您可以让同一个应用程序提供多个模式。 GraphQL 模式甚至可以在运行时构建。也许你甚至可以使用 fastify GraphQL 中间件。对于更复杂的事情,您可能必须构建自己的中间件,但这完全有可能。
创建具有不同模式的多个端点很容易。您可以简单地挂载更多 GraphQL 中间件:
for (const customer of customers) {
app.register(graphqlFastify, {
prefix: '/' + customer.name + '/graphql',
graphql: {
schema: customer.schema,
},
});
}
但这可能无法很好地扩展。您可能想改用带参数的路由,然后自己执行 GraphQL 函数。也许,您可以将其与 graphql-helix:
结合使用import { graphql } from 'graphql';
fastify.get('/:username/graphql', (request, reply) => {
const { queryString, variables, operationName } = getGraphQLParams(request);
const schema = getUserSchema(request.username);
return graphql(schema, queryString, rootVal, context, variables, operationName);
});
上面的所有代码都没有经过测试,我对 fastify 的了解还不足以创建工作代码。但我希望这显示了可能性。