GraphQL颠覆传统REST网页设计架构

GraphQL是2012年时,脸书为了改善手机App操作体验而开发的API查询语言,可以网页应用直接通过API,来描述所需要的数据,来向后端数据库取得,而不用多次通过Rest API调用,才能来拼出所需数据,最直接的好处是,可以减少同一个网页向后端调用的次数,加快网页应用的反应速度,提供更顺畅少等待的用户操作体验。

后来,2015年时,脸书将这项技术开源发布,竟成了许多网络巨头爱用的网页数据层访问技术,如Netflix、Airbnb、GitHub、Twitter、Pinrerest、 Yelp、PayPal、IBM也都有采用,也有不少大型媒体集团如纽约时报、CNBC、丹麦第二电视台也导入,作为打造新一代云计算原生应用与大规模网络应用的新数据传输架构,JIRA和Trello服务的母公司Atlassian也是GraphQL的重度用户。而身为开发源头的脸书,全球每天数十亿次的API调用,早就改成了GraphQL。

甚至连汽车大厂Audi和BMW,都用GraphQL来打造电动汽车数字服务与后端系统间串联的数据服务,例如BMW的汽车数据API,就是通过GraphQL来访问数据,而不是通过传统的RESTful网页API设计。

全球180万家企业爱用、3千万名开发者注册、托管超过1亿份程序代码的GitHub,在最新一版的自家API中,也改用GraphQL,来取代原本的RESTful设计风格。这意味着,未来可以连接到GitHub平台上的工具或软件,都将会支持GraphQL的API查询语言。

过去采用REST架构的API调用方式,后端程序负责数据层的处理,而前端程序只负责拿到数据后的呈现处理。当前端程序有数据需求时,只能概略向数据源API提出请求,而由后端程序决定,下达SQL指令到数据库取出数据,再抛给前端。

但是,REST API每次只能调用单一数据源,同一网页若有多种数据源的需求,例如用户帐号数据、交易数据、推荐产品清单,就得向三个数据源提出三次API调用请求,而且因为后端程序无法得知前端程序目前的处理状态,只能将符合条件的数据全都抛给前端,这都会徒增了抛给前端的数据量和连接复杂度。

GraphQL的作法则和REST截然不同,GraphQL可以让前端程序以对象结构来描述所需要的数据,甚至可以使用嵌套结构来描述数据对象的字段,能更精准也更明确地描述所需要的数据,再向后端API提出数据查询请求,而后端API则通过Web服务器上的GraphQL模块或GraphQL服务器,向不同的数据源所在的数据库取得数据。

脸书不只开源GraphQL技术,也提供了一整套的GraphQL平台工具Reley,可供企业构建GraphQL风格的网站,这也是脸书自家网站使用的中间件。

现在还有一家创业公司公司Apollo在2018年11月推出了企业级GraphQL平台产品,可布署在用户端或服务器端,来提供大规模GraphQL API的调用。 Audi就是用Apollo来打造一个GraphQL API的数据调度层。

因为用户越来越多,脸书也决定放手,发布开源项目管理权,成立了GraphQL基金会,捐给Linux基金会这个中立组织来管理,来确保GraphQL的中立发展。

Linux基金会目前正在招募GraphQL基金会的初始成员,要创建一个管理董事会、技术指导委员会和营销团队来共同维护,这也让GraphQL的长期发展,不再完全由Facebook决定,而是通过开源社群来主导,有利于吸引其他科技巨头的加入,来壮大其发展规模。

根据Linux基金会的网站说明,已有多家大型企业或网络公司加入GraphQL的开发行列,包括了Airbnb、Atlassian、Audi、CNBC、GitHub、Major League Soccer、Netflix、Shopify 、纽约时报、Twitter、Pinterest和Yelp。