首页 > 其他分享 >你能比较一下 GraphQL 和 tRPC 吗?

你能比较一下 GraphQL 和 tRPC 吗?

时间:2023-02-01 20:24:45浏览次数:54  
标签:一下 tRPC 应用程序 API GraphQL 使用 类型

介绍

Twitter上有很多关于“GraphQL与tRPC”的讨论,用于为您的应用程序构建现代后端。GraphQL 近年来作为 REST 事实上的继承者而变得流行起来,而 tRPC 解决了全栈应用程序中的端到端安全问题。这就像将苹果与橙子进行比较。

GraphQL 是一种查询语言,tRPC 是一种库。

作为过去几年使用 GraphQL 的开发人员,这促使我比较两者,看看他们都擅长什么(以及他们不擅长什么)。

文章修改和引用与:https://gethackteam.hashnode.dev/can-you-compare-graphql-and-trpc

正文

但首先;你可能用错了 GraphQL

GraphQL 是 API 的查询语言,它不是 REST 的一对一替代品。这是一种以比 REST 更灵活的方式查询 API 的方法,使您能够控制请求的响应。在许多Twitter对话中,我发现人们将GraphQL与REST进行比较,这与GraphQL不同。此外,GraphQL 类型系统并不意味着用于端到端类型安全,至少不是以第一种方式。而是作为记录 API 并确保 API 的运行时类型正确的一种方式。

我们可以将 GraphQL 与 tRPC 进行比较吗?

GraphQL 是 API 的查询语言,而 tRPC 是一组用于构建端到端类型安全 API 的库。如前所述,这就像将苹果与橙子进行比较。但是,让我们分解它们并了解它们的特征。

GraphQL 是一种查询语言

GraphQL API 通常使用 HTTP 作为传输层,GraphQL 查询作为 POST 请求发送到 API。然后,API 处理查询并将结果作为 JSON 响应返回。这与 REST API 的工作方式相同,但 GraphQL 是一种查询语言,而不是协议。这意味着您可以在任何传输层和您想要的任何协议上使用 GraphQL。这也是为什么你可以在前端应用程序中使用 GraphQL 的原因,因为它只是一种查询语言。

82

GraphQL 本身只不过是一种查询语言,由 GraphQL 实现库和框架根据其规范实现这种查询语言。这意味着有许多不同的方法来实现 GraphQL,并且有许多不同的方法来使用 GraphQL。这也是为什么在前端应用程序中有许多不同的方法使用 GraphQL 的原因。

tRPC 是一个库

tRPC 是一组库,它使用 TypeScript 来确保整个应用程序中的类型安全。其主要目的是使在单个代码库中构建端到端类型安全应用程序变得容易。基础是 tRPC 服务器,可在其中定义终结点(或路由)、这些终结点的类型定义,并处理与数据源(如数据库)的任何连接。

83

可以使用 tRPC 客户端库在前端应用程序中使用 tRPC API。您不会直接发送 HTTP 请求来获取数据,而是让 tRPC 客户端为您处理此问题,几乎就像 API 的 ORM 一样。此客户端可以进行强类型 API 调用,而无需依赖代码生成。您可以将 TypeScript 类型从服务器直接导入到前端应用程序中,而无需生成任何代码。

GraphQL 和 tRPC 的区别是什么?

这是一个非常主观的问题,但我认为了解 GraphQL 和 tRPC 的区别很重要。这样,您可以自己决定要在应用程序中使用的内容。

GraphQL 非常适合查询多个数据源

GraphQL 擅长将多个数据源组合到单个查询中。GraphQL 通常用于数据建模和架构,它非常适合此。例如,如果要查询来自一个服务(如无头 CMS)的数据和来自另一个服务(假设数据库)的数据,则可以使用 GraphQL 在单个查询中执行此操作。您甚至可以在字段或类型级别合并此数据。这是Facebook和GitHub等公司使用GraphQL的主要原因之一。

81

而 tRPC 并不是真正用于此目的。它用于构建端到端类型安全的 API,并不是真正用于组合多个数据源。你可以这样做,但这不是 tRPC 的目的。

RPC 非常适合端到端类型安全

tRPC 非常适合端到端类型安全,它允许您在前端应用程序中使用与在后端应用程序中使用的相同类型。GraphQL 没有内置的方式来在前端和后端之间共享类型定义,但您可以使用 GraphQL 模式来生成 TypeScript 类型定义。但这不同于端到端类型的安全。每次更新 GraphQL 模式时,都必须重新生成类型。

使用 tRPC 时,您将使用 TypeScript 构建所有内容。这意味着您可以将类型从服务器直接导入到前端应用程序中。tRPC 客户端可以直接从 tRPC 服务器访问 TypeScript 类型。在前端应用程序中查询 tRPC 时不需要外部库,因为它都是内置的 tRPC 库。

GraphQL 允许解耦服务;单个代码库的 tRPC

GraphQL 非常适合解耦服务,因为它与编程语言和传输层无关。这意味着您可以使用所需的任何编程语言和任何传输层。公开 GraphQL API 的服务可以用任何编程语言实现,例如 TypeScript 和 Go,并且仍然能够相互通信。对于技术多样化的团队和公司来说,这是扩展和限制团队之间依赖关系的好方法。

tRPC 并不是真正用于此目的。它用于在 TypeScript 中的单个代码库中构建端到端的类型安全 API!它将您的前端和后端紧密地结合在一起,例如在 monorepo 中。您可以在前端和后端应用程序中使用相同的类型,这允许您快速迭代应用程序。如果你正在构建一个全栈 TypeScript 项目,有什么不喜欢的?

tRPC 比 GraphQL 更容易使用

“tRPC 比 GraphQL 更容易使用”是人们在比较 GraphQL 和 tRPC 时反复出现的一句话。但是由于 tRPC 是一个库,而 GraphQL 是一种查询语言,因此无法进行比较。对于 GraphQL,开发人员可以使用众多可用实现之一来构建 GraphQL,而 tRPC 是一组开箱即用的库。这使得它不是一个公平的比较,但无论如何让我们分解一下。

例如,您可以使用模式优先的 GraphQL 服务器库构建 GraphQL API。您必须定义 GraphQL 架构,编写解析程序以从数据源收集数据,然后从架构生成类型。走这条路需要做很多工作,并且作为开发人员需要做出许多选择。

但你也可以使用代码优先的 GraphQL 服务器库构建 GraphQL API。这意味着您可以编写解析程序,然后从解析程序生成架构。代码优先库在开发人员体验方面更接近 tRPC,但仍然比使用 GraphQL 即服务(如 StepZen)更具挑战性。

然后,您还可以选择各种 GraphQL 客户端库。您可以使用 GraphQL 客户端库(如 Apollo Client 或 urql)来帮助您进行缓存和状态管理,也可以使用仅处理 HTTP 请求的库。有很多选择,当你不熟悉 GraphQL 时,可能不清楚。

结论

在这篇博文中,我解释了 GraphQL 和 tRPC 之间的区别。我希望这篇博文能帮助您了解两者之间的差异,并且您现在可以更好地决定在下一个项目中使用哪一个。在 GraphQL 和 tRPC 之间进行选择时要问自己的主要问题是:

是否要在单个查询中查询多个数据源并保持服务分离?如果是这样,GraphQL 是一个完美的选择。如果你想要端到端类型的安全,并且不关心前端和后端的解耦,tRPC 更适合。
您是否打算使用多种编程语言?选择GraphQL,因为它与编程语言无关。如果要在整个应用程序中使用 TypeScript,tRPC 可能更适合。
在 GraphQL 和 tRPC 之间进行选择时,还有许多其他事情需要考虑,但在我看来,这些是主要的。

标签:一下,tRPC,应用程序,API,GraphQL,使用,类型
From: https://www.cnblogs.com/MrChuJiu/p/17084046.html

相关文章

  • GraphQL 与 REST API使用对比
    介绍简单说一下GraphQL与RESTAPI的的对比文章修改和引用与:https://avocadev.hashnode.dev/graphql-vs-rest-putting-it-to-rest正文使用对比看看下面的示例中的J......
  • 说一下created和mounted区别
    created:Vue实例vm能够访问data里的数据,和methods里的方法,即在模板渲染成html页面之前,可以通过ajax获取页面所需要的初始化数据,可以在这个生命周期函数操作。mounted:经......
  • 记录一下测试中遇到的噪音
    1、三相电感大电流1000多A,开关频率3k到5k左右。声音非常闷,听起来心里很难受,很压抑,打个比方,这种声音像人要上不来气了。2、直流电感100A,左右,开关频率4k左右。声音很尖锐。1......
  • 记录一下自己在调试过程中遇到的低级错误
    1、直流母线大电容极性搞反了。因为电容数量较多,其中有一个接反了,这个是安装的不仔细。后续因为母排都装上了,找出来也挺费劲。又是小镜子,又是手电筒,各种小工具都用上了。2......
  • 我也想推歌,于是放一下歌词QWQ
    拨开天空的乌云像蓝丝绒一样美丽我为你翻山越岭却无心看风景我想你身不由己每个念头有新的梦境但愿你没忘记我永远保护你不管风雨的打击全心全意两个人相互辉映......
  • 吐槽一下用友U8的API开发
    用友公司作为全国财务系统的一流企业,按理说在文档的编写上应该严谨、可靠。但是用友在这方面做的却不尽人意,不仅仅是文档写的简单、潦草,而且还错误百出。关键的是,没有客服......
  • 工作中遇到的一个需求,记录一下(银行帐号这个字段只能输入数字或者大写字母)
    昨天领导让实现一个需求,截图如下 复习一下所用到的知识:str = "runoob.com"print(str.isalnum()) #判断所有字符都是数字或者字母print(str.isalpha()) #判断......
  • 通过 eShopOnContainers 项目学习一下微服务
    这里是项目地址https://github.com/dotnet-architecture/eShopOnContainers,这是微软创建的一个基于.NET平台的微服务架构的示例应用程序,里面基本上市面上主流的时髦的......
  • 打印机驱动的模式问题 看到别人说的 记录一下 感觉还是很有启发的
    想弄出每页的图片的话,大概有三个办法:投机取巧的办法,属于野路子的,用GPD去定制unidrv.dll,生成一个实际上无任何用的打印机驱动(当然你可以把自己的printerprocessor附加到别的......
  • 码一下
    转自https://zhuanlan.zhihu.com/p/152198566https://zhuanlan.zhihu.com/p/18312880212345678......