繁体   English   中英

REST 与数据库作为 GraphQL API 数据源?

[英]REST vs Database as GraphQL API data source?

我们正在开始一个新的全栈项目。 已经决定我们将使用 React 作为前端,它应该使用 GraphQL API。

我们正在考虑开发此 API 的两种情况:

  • 第一个是使用 Apollo 构建一个使用 REST API 作为数据源的 GraphQL API。

  • 第二个是构建一个使用数据库作为数据源的 GraphQL API,跳过 REST API。

每种情况的优缺点是什么? 这个比那个好吗?

根据我们对 gitter 的讨论,

由于您是从头开始构建平台,因此无需通过 REST API 构建 GraphQL 层。 那将是双重工作,不需要。 我建议您设置Apollo-Server ,它将直接与您的数据库交互。

你说你可能需要使用一些遗留的 API,我推荐了微服务,它可以很容易地与 graphql 一起工作。

关于 PRISMA,它没有给你太多的灵活性。 它还不允许对字段进行符合 ACID 的更新,例如递增或递减值。 github 上的这个问题可用于跟踪此功能的更新。

PRISMA 有助于快速设置,但我(个人意见)觉得它不那么灵活。

您的最后一个问题是如何在没有 REST API 的情况下查询数据库,为此我建议直接从您的服务器查询。

GraphQL 是客户端,Apollo 将帮助您扩展它并提供更多功能。 除了不需要为每个请求定义单独的端点之外,您不需要做与创建 REST API 时所做的事情有很大不同的事情。 除了您只返回/查询您需要的数据并且这可以动态完成之外,数据库交互几乎保持不变。 来自graphql 网站

向您的 API 发送 GraphQL 查询并准确获取您需要的内容,仅此而已。 GraphQL 查询总是返回可预测的结果。 使用 GraphQL 的应用程序快速且稳定,因为它们控制获得的数据,而不是服务器。

其他提及: AWS Appsync

第二种情况最好

第二个是构建一个使用数据库作为数据源的 GraphQL API,跳过 REST API。

REST 和 GraphQL 都可以通过 HTTP 操作,尽管 GraphQL 与协议无关。 GraphQL 是这个领域的新生事物,具有许多很酷的特性,它解决了 REST 面临的大部分问题,例如:

1.) 多个端点获取数据

In rest we have create multiple API endpoints

2.) 过度/不足获取

Some time API return extra data that we don't need or less data in response

3.) 网络请求

multiple endpoint leads to more network requests 

4.) 错误处理

REST 中的错误处理非常简单,我们只需检查 HTTP 标头即可获取响应状态。 根据我们获得的 HTTP 状态代码(404、503、500 等),我们可以轻松判断错误是什么以及如何解决它。 另一方面,当通过 HTTP 操作 GraphQL 时,我们将始终获得 200 OK 响应状态。 当处理 GraphQL 查询时发生错误时,完整的错误消息与响应一起发送到客户端

5.) 版本控制

通常在使用第三方 REST API 时,我们会看到 v1、v2、v3 等内容,它们仅指示我们正在使用的 REST API 的版本。 这会导致代码冗余和代码的可维护性降低。 使用 GraphQL,不需要版本控制,因为我们可以轻松地向我们的 GraphQL API 添加新字段和类型,而不会影响现有查询。 此外,我们可以轻松地将字段标记为已弃用,并且这些字段将从服务器获得的响应中排除

有关详细比较,请访问GraphQl vs Rest

或这篇文章

或官方 GraphQL 站点

使用 REST 为您的 GraphQL 提供动力就像使用 a 为您的特斯拉提供动力一样。 简直傻逼,。 使用数据库但只选择 GraphQL 查询询问的字段和记录。 不是“选择 *”。 如果需要速度,请使用 Redis 缓存。

REST是一种软件体系结构,定义了用于创建Web服务的一组约束,于2000年推出。而GraphQL是API的数据查询和操作语言,以及使用现有数据执行查询的运行时,由Facebook在2000年开发。 2011。

REST API的缺点?

REST API的问题在于它们具有多个端点。 这些需要往返来获取数据。 每个端点都代表一个资源,如果我们需要来自多个资源的数据,则需要多次往返来获取数据。 REST API中要求的语言非常有限。

在REST中,存在一个过度获取的问题,例如:如果客户端要选择资源中的特定记录,则REST API将始终获取所有字段,而与客户端的需求无关。 它超出了网络和内存资源的使用范围,但是客户端和服务器端

Graphql相对于REST的优势

解决使用REST API 过度获取和不足获取的应用程序导致过度获取和不足获取的问题,因为该端点中的所有数据将以JSON格式返回。 这会导致性能和可伸缩性问题。

借助GraphQL及其查询,模式和解析器,开发人员可以设计API仅调用特定的数据需求,而这解决了过度提取和提取不足的难题。

前端上更快的产品迭代在设计REST API时,谈到前端上更快或更快速的迭代可能会成为瓶颈。 其背后的原因是因为REST API根据应用程序中的视图设计端点。

借助GraphQL,开发人员可以编写查询以指定其数据要求,并且开发前端的迭代可以继续进行而无需更改后端

GraphQL可以在后端上进行更好的分析,而使用REST API的应用程序可以在端点中获取全部数据,使用此应用程序的所有者无法获得有关特定数据元素使用情况的见解,因为每次都会返回整个数据。

另一方面,GraphQL使用解析器,并且它们实现类型中的特定字段。 这样,应用程序所有者可以跟踪解析器的性能,并找出系统是否需要性能调整。

GraphQL模式的优点 GraphQL使用模式定义语言(SDL),该模式包括API中使用的所有类型,它定义客户端如何访问服务器上的数据。 由开发人员定义架构后,前端团队和后端团队都可以并行工作,因为他们知道数据的结构。 这有助于提高团队的生产力。

事实证明,GraphQL在获取满足给定条件的数据时非常有用。 示例:-您可以不要求所有学校的学生,而可以专门要求特定批次的学生。

全文: GraphQL与REST:详细比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM