rest - GraphQL 和微服务

标签 rest architecture microservices graphql

在我的公司,我们决定为一个新项目采用微服务架构。
我们已经了解了 GraphQL,并意识到了它用作我们的单一 API 端点的潜力和优势。

我们不同意的是 GraphQL 和每个微服务之间应该如何进行通信。有些人支持 REST,其他人则说我们还应该为每个服务都有一个 graphQL 端点。

我想知道每种方法的优缺点是什么。
例如,在 graphQL 中包含所有内容似乎有点多余,因为我们将在每个服务中复制部分模式。
另一方面,我们使用 GraphQL 来避免一些 REST 陷阱。我们担心拥有 REST 端点会抵消从 gQL 获得的优势。

有没有人遇到过类似的困境?
我们中没有人对 GraphQL 有经验,那么这里是否有一些我们可能会遗漏的明显的利弊?

提前致谢!

最佳答案

好问题!听起来您在问如何为 GraphQL 和微服务设置架构,以及为什么。

背景

我建议使用 GraphQL,因为最好的用例是以干净的方式整合数据源,并通过一个标准化的 API 向您公开所有数据。另一方面,使用微服务的主要问题之一是很难对可能拥有的所有不同功能进行争辩。随着应用程序的增长,整合所有这些微服务功能成为一个主要问题。

使用这些技术的好处是巨大的,因为现在你基本上拥有一个 GraphQL API 网关,它允许你从客户端访问你的微服务,就好像它是一个单一的单体应用程序一样,但你也从性能和使用微服务中获得了许多好处。效率观点。

建筑学

所以我推荐的架构是在你的微服务前面放置一个 GraphQL 代理,在你的 GraphQL 查询和变异解析器中,调用你需要检索必要数据的函数。

在 GraphQL 微服务前面有一个 GraphQL 网关或在 REST 端点前面有一个 GraphQL 网关并没有那么重要,尽管我实际上认为将微服务功能公开为 REST 端点会更简单,因为每个功能理论上应该只服务于一个目的。在这种情况下,您不需要 GraphQL 的额外开销和复杂性,因为幕后不应该有太多关系逻辑。

如果您正在寻找微服务提供商,我见过的最好的提供商是 AWS Lambda , Webtask , Azure Functions , 和 Google Cloud Functions .您可以使用 Serverless作为管理和部署这些微服务功能的一种方式。

例如:

import request from 'request';

// GraphQL resolver to get authors
const resolverMap = {
  Query: {
    author(obj, args, context, info) {
      // GET request to fetch authors from my microservice
      return request.get('https://example.com/my-authors-microservice');
    },
  },
};

GraphQL 服务

这是我们在 Scaphold 中一直在探索的东西。以及万一您想依靠服务来帮助您管理此工作流程。我们首先提供 GraphQL 后端服务,帮助您在几分钟内开始使用 GraphQL,然后允许您将自己的微服务(即自定义逻辑)作为函数组合附加到您的 GraphQL API。它本质上是最先进的 webhook 系统,可为您提供灵活性并控制如何调用您的微服务。

也欢迎加入 Serverless GraphQL Meetup如果您在该地区,则在 SF :)

希望这可以帮助!

关于rest - GraphQL 和微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983286/

相关文章:

java - 共享库与微服务?

facebook - 是否有可能获得 facebook 页面提供的所有报价

java - 如何使用 Java 中的 Twilio API 和 Rest API 将文本转换为语音

c# - 使用 C# 和 RavenDB 的自定义字段设计

ruby-on-rails - Ruby on Rails 中的 Multi-Tenancy 架构

c# - 跨 C/C++(非托管)和托管 C# 代码共享公共(public)定义

node.js - 在nodejs中共享微服务之间的代码依赖

ruby - twilio-ruby gem 在调用时是否采用 'from' 、 'to' 和 'url' 以外的参数?

rest - 如何将应用程序 glassfish 移植到 tomcat?

java - Spring MVC - 从另一个休息服务内部调用休息服务