为什么我选择了GraphQL?

你通常用什么API?

在开发新应用时,我比较了使用”REST API”和”GraphQL”,最终决定使用GraphQL。需要注意的是,我之前一直使用REST,对GraphQL还没有经验。

我想写一下为什么我选择了GraphQL以及与REST API相比有什么有吸引力的地方。

GraphQL 是什么?

首先,我相信很多人已经知道GraphQL是什么,简单来解释一下。

GraphQL是一种用于API的查询语言,它是一个用于执行查询的运行时,使用现有数据。 GraphQL提供了对API内数据的完全理解和易于理解的描述,并赋予客户端请求所需的能力,使得随着时间的推移可以轻松地演进API,并提供了强大的开发工具。
引用:GraphQL官方网站

查询一词的直译是指“询问”、“访问”等含义。
这里说的是API查询语言,简单来说,就是指客户端应用程序从API获取所需数据时使用的语言。

GraphQL的优点和缺点

下面将依次介绍GraphQL的优点和缺点。

[优点]

少ないリクエストで複数のリソースにアクセス可能
REST APIでは特定のエンドポイントを呼び出すことができませんでした。
しかし、GraphQLでは1つのエンドポイントで複数のデータを取得できるため、リクエストが無駄になることなく、パフォーマンスの低下を招きづらく、サーバー側に負担をかけずにフェッチが行えます。

最小限のデータのみを取得
REST APIではアクセスしたエンドポイントに含まれる全ての情報を取ってきてしまうため、オーバーフェッチングになってしまっていた。
対してGraphQLは欲しい情報を細かく選んで最小限で取ってくることができます。

型指定でデータが明確になる
GraphQLは型指定ができるのでどういったデータを扱っているのか見た目でも分かりやすくなる。
型指定は間違いがあった際はエラーを出してくれるのでバグがすぐに見つけることができるため堅牢性に繋がります。

【缺点】

学習コストがかかる
GraphQLは、2015年に登場した比較的新しい規格のため、情報量が少ないです。
独学の場合、少ない情報の中で勉強をしなければならないので、マスターするまでに一定の時間がかかることもあります。

RESTよりもキャッシュが複雑になりやすい
RESTの場合、URLベースでキャッシュを生成するため、比較的容易に扱うことができます。
一方、GraphQLのキャッシュはURLを生成せず、レスポンス内容も異なるため、複雑です。
そのため、CDNによるオフロードの実現が難しかったり、クライアントサイドへ悪影響を及ぼしたりする可能性があります。

REST API和GraphQL API的比较

我们还将对其他代表性特征进行比较。

REST APIGraphQL API通信プロトコルHTTPHTTPペイロードの形式(主に)JSON(主に)JSONエンドポイント複数1つ型付け弱い強いデータ操作の種類GET/POST/PUT/DELETEQuery/Mutationデータ取得の柔軟性低い高いクライアントからサーバへのリクエストの数クライアントの要望に応じて複数回のリクエストが送られることがしばしばある。必要なデータを過不足なく指定することで、1回のリクエストで済ませる。

在数据复杂相互关联的情况下,相比REST,GraphQL更适合。客户端可以灵活地发出查询,而服务器则可以实现API而不必担心客户端的复杂要求。

我选择的原因。

雖然很簡單,但這次我根據以上的資訊進行了考慮。從您所看到的,可以明顯地看出GraphQL有很多優點,但我選擇GraphQL的原因如下。

– 可以简洁明了地描述,避免冗余

這是個人喜好問題,但我是個盡量節省浪費的人,所以對於只有一個端點或避免過度獲取資料的選項,我感到非常有吸引力。
此外,使用TypeScript進行開發也能提供強型別,這讓我感到能更直觀地進行編寫。

可以使用TypeScript创建模式

尽管上面没有提到,但是GraphQL有两种创建Schema的方法。一种是通过称为“代码优先”(Code-First)的方式从TypeScript文件创建GraphQL Schema,另一种是通过称为“模式优先”(Schema-First)的方式从GraphQL Schema创建TypeScript文件。由于我在开发中打算使用Next.js和NestJS,所以TypeScript非常适合。

制作这个应用程序的难度相对较低。

这次我要开发的应用程序是个人开发的,预计是一个简单的口碑应用,所以难度并不是很高。
我们并没有考虑到使用CDN进行负载均衡的缺点。
如果考虑到复杂的开发情况,由于相关文件很少,问题解决可能需要一些时间,所以需要注意。

– 我现在有时间专注于学习

由于我个人目前有时间投入学习,我可以通过花费时间来弥补学习成本的劣势,这也是因为我想要尝试新的技术。另外,我感觉在日语上这项技术的文档还相对较少,但在英语上却有相对较多的文档可供参考。此外,Next.js和NestJS官方文档中也都有关于GraphQL的页面,说明引入它可能相对容易一些。

总结

为什么我选择GraphQL的原因如上所述。

在实际使用中,我认为GraphQL与RESTful API的区别并不是非常大。我建议根据各自的开发环境和情况来选择使用。

如果我能帮助到一些在选择API时犹豫不决的人,那将是非常高兴的。

请提供以下原文,然后我会为您进行翻译。

    • GraphQLとは?RESTとの違いや導入事例を紹介

 

    【Shopify API】GraphQLとREST の徹底比較
bannerAds