多租户 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 的了解还不足以创建工作代码。但我希望这显示了可能性。