使用GraphQL的5个理由

原文:Top 5 Reasons to Use GraphQL

目的

GraphQL已成为新的API开发标准。

为何仅用两年多时间,GraphQL就已走在了API开发的前沿?为何开发人员喜欢GraphQL快速开发?本文给出几个理由。

1) GraphQL API 有强类型 schema

对大多数API而言,最大的问题在于缺少强类型约束。常见场景为,后端API更新了,但文档没跟上,你没法知道新的API是干什么的,怎么用,这应该是前后端掐架的原因之一。

GraphQL schema 是每个GraphQL API的基础,它清晰的定义了每个API支持的操作,包括输入的参数和返回的内容。

GraphQL schema是一个约定,用于指明API的功能。

GraphQL schema是强类型的,可使用SDL(GraphQL Schema Definition Language)来定义。相对而言,强类型系统使开发人员自行车换摩托。比如,可以使用构建工具验证API请求,编译时检查API调用可能发生的错误,甚至可以在代码编辑器中自动完成API操作。

schema带来的另一个好处是,不用再去编写API文档——因为根据schema自动生成了,这改变了API开发的玩法。

2) 按需获取

我们经常谈GraphQL的主要优点——前端可以从API获取想要的数据,不必依赖REST端返回的固定数据结构。

如此,解决了传统REST API的两个典型问题:Overfetching和Underfetching。

使用GraphQL,前端自己决定返回的数据及结构。

Overfetching

Overfetching意味着前端得到了实际不需要的数据,这可能会造成性能和带宽浪费。

栗子:个人资料页面需要呈现用户姓名和生日;提供用户信息的API(如/users/id)还会返回用户的地址和账单信息,但这在个人资料页面没有用,也没必要。

Underfetching

Underfetching与Overfetching想反,API返回中缺少足够的数据,这意味着前端需要请求额外的API得到需要的数据。

最坏的场景下,不足的结果会导致臭名昭著的N+1请求问题:获取数据列表,而没有API能够满足列表字段要求,不得不对每行数据发起一次请求,以获取所需数据。

栗子:假设我们在捣鼓一个博客应用。显示 user列表,除user本身信息外,还要显示每个user最近一篇文章的title。然而,调用/users/仅得到user集合,不得不对每个user调用/users/<id>/articles获取其最新文章。

说明:当然你可以再写一个API来满足特殊场景,如/users/lastarticles/来满足上面的需求,但需要编写后端相关代码,调试和部署,加班....有这时间何不去陪家人孩子。

3) GraphQL支持快速产品开发

GraphQL使前端开发人员轻松,感谢GraphQL的前端库(ApolloRelayUrql),前端可以用如缓存、实时更新UI等功能。

前端开发人员生产力提高,产品开发速度加快,无论UI如何变后端不用变。

构建GraphQL API的过程大多围绕GraphQL scheme。由此,经常听到 schema-driven development(SDD),这只是指一个过程,功能在schema中定义,在resolver(解析器)中实现。

有了像GraphQL Faker这样的工具,前端开发可以在schema定义后开始。GraphQL Faker模拟整个GraphQL API(依赖于定义的schema),因此前后端可以独立工作。

4) Composing GraphQL API

schema拼接(stitching)是GraphQL中的新概念之一,简而言之,可以组合和连接多个GraphQL API,合并为一个。与React组件概念类似,一个GraphQL API可以由多个GraphQL API构成。

这对前端开发非常有用,不然,需要与多个GraphQL端点通信(通常在微服务架构或与第三方API集成时)。由于schema拼接,前端只需要处理单个API端点,而协调与各种服务通信的复杂性从前端隐藏。

5) 丰富的开源生态和牛逼闪闪的社区

自Facebook正式发布GraphQL以来,仅两年多时间,整个GraphQL生态系统的成熟程度难以置信。

刚发布时,开发人员使用GraphQL的唯一工具是graphql-js参考实现——一个Express.js中间件和GraphQL client Relay。

现在,GraphQL规范的参考实现有多种语言可以选择,并有大量的GraphQL客户端。此外许多工具提供了无缝的工作流程,并在构建GraphQL API时提供爽爽的开发体验,如:Primsa、GraphQL Faker、GraphQL Playground、graphql-config等。

GraphQL社区日益壮大,越来越多的公司将其用之于产品。


参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 一.時間: 2017年3月1日-2017年5月31日 二.目標: 為公司在名錶銷售,個人訂製珠寶銷售創造,月營利港...
    andychan1106阅读 181评论 2 4
  • 2017.11.05周日,晴 今天晚上我和儿子到都市星联大酒店参加由夏尔美术主办的家庭教育课堂。我们到达目的地...
    王瀚霆妈妈阅读 252评论 0 0
  • 今天,家人在一起喝下午茶 、大家难得在一起,而我一人滔滔不绝,时而还说老公在一些决策错误,自己当时完全失去觉察。等...
    夏虹正如阅读 157评论 1 1
  • 因为下午要转战凯恩斯,所以上午司机兼导游老沈带我们参观了墨尔本有名的科林大街,这里是墨尔本的金融聚集地,繁华而有序...
    猫司令的碎碎念阅读 667评论 0 2