什么是 GraphQL?
前言
GraphQL is a data query language developed internally by Facebook in 2012 before being publicly released in 2015. It provides an alternative to RESTful architectures. —— from wikipedia.
GraphQL 是 Facebook 于 2012 年在内部开发的数据查询语言,在 2015 年开源,旨在提供 RESTful 架构体系的替代方案。
GraphQL 的特性
它定义了一套类型系统(Type System
),类似于持续演进(相互借鉴)的Flow
和TypeScript
,用来描述你的数据,先看官网的例子(细节再议)
特性
- 强类型:
GraphQL
与 C 和 Java 等后端语言相得益彰,服务端能对响应的形状和性质做出一定保证,而RESTful
是弱类型的,缺少机器可读的元数据; - 分工:
GraphQL
让服务端定义好支持哪些Queries
,把对数据的Query
需求下放到客户端管理,分工明确的同时保持对 API 的聚焦; - 分层:
GraphQL
的Query
本身是一组分层的字段,查询就像返回的数据一样,是一种产品(工程师)描述数据和需求的自然方式;(PS:部分翻译的,国外好像都把产品叫做 Product Engineers 而不是 Product Manager。感觉在吐槽的样子) - 预测性:
GraphQL
的Query
只返回客户端要求的内容,没有任何冗余(不浪费流量),而且它只有一个接口地址,由此衍生了另一个特性; - 兼容性:需求变动带来的新增字段不影响老客户端,服务端再也不需要版本号了,极大简化了兼容问题;(App 通常是 1-2 周的固定周期发版,在原生应用不强制升级的世界里,会出现用户 1-2 年都不升级的情况。 这意味可能同时有 52 个版本的客户端查询我们的服务端,而在 Fackbook 中 GraphQL API 曾支持了横跨 3 年的移动端)
- 自检性:
GraphQL
能在执行Query
之前(即在开发时)提供描述性错误消息,在给定查询的情况下,工具可以确保其句法是正确有效的,这使得构建高质量的客户端变得更加容易; - Doc & Mock:
GraphQL
的文档永远和代码同步,开发无需维护散落多处的文档,调用者也无需担心过期问题,而且基于类型系统的强力支撑和 graphql-tools,mocking 会变得无比容易
生态
https://github.com/chentsulin/awesome-graphql
价值
GraphQL主要是作用于数据接口,比如前端后端交互。是给客户端筛选自由获取服务端事先定义好的数据,后端使用了GraphQL之后,数据库查出来A,B,C,D四个字段,客户端需要数据的时候,你可以随意使用这四个字段的各种组合,只要A,C字段还是只要A,C,D字段等等,不再需要和服务端交流。
什么是 GraphQL?相关推荐
- 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能
相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制 完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询 自APIJSON发 ...
- 【译】GraphQL vs. REST
原文地址:GraphQL vs. REST 原文作者:Sashko Stubailo 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandus ...
- fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作
fcm和firebase In a previous post I confessed defeat in attempting to get an AWS Lambda GraphQL server ...
- 如何使用FaunaDB + GraphQL
I have one or two projects I maintain on Netlify, in addition to hosting my blog there. It's an easy ...
- 我希望支持JavaScript GraphQL实现的API
The GraphQL schema language is great! It is certainly the best way to communicate anything about a G ...
- graphql是什么_为什么GraphQL是避免技术债务的关键
graphql是什么 GraphQL (not to be confused with GraphDB or Open Graph or even an actual graph) is a rema ...
- graphql_普通英语GraphQL指南
graphql by Luis Aguilar 路易斯·阿吉拉尔(Luis Aguilar) 普通英语GraphQL指南 (A Guide to GraphQL in Plain English) 您 ...
- react 错误边界_React with GraphQL和错误边界中的自定义错误页面
react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...
- java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器
java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...
- graphql redux_如何在Redux应用程序中使用GraphQL
graphql redux by Howon Song 通过宋颂恩 如何在Redux应用程序中使用GraphQL (How to use GraphQL in your Redux app) Fetc ...
最新文章
- Error in terms.formula(formula, data = data) : invalid model formula in ExtractVars
- 开发日记-20190914 关键词 汇编语言王爽版 第六章
- centos7下端口映射
- [C++] 前置++与后置++
- JavaScript系列:模块化与链式编程
- (原)ubuntu上安装Torch7及nn及dpnn
- 极客爱情 2.4 | 和程序员男友过节是这样的
- 《计算机系统基础》复习——简答题 01
- MySQL卸载不干净-MySQL Connector Net xxx文件怎么也删除不了?一招解决它
- Android PackageManagerService(三)pm命令安装流程详解
- centos linux系统后门程序
- 用AI对抗AI!教代码调戏深度学习算法生成的假视频
- 费解的开关 Java
- 关于微信公众号支付接口开发遇到的奇葩问题,始终返回get_brand_wcpay_request:fail。
- 学习经验分享之四:YOLOv7学习心得
- linux vim 命令无效,Linux vim 命令 command not found vim 命令详解 vim 命令未找到 vim 命令安装 - CommandNotFound ⚡️ 坑否...
- JDK下载及安装教程(很详细)
- YD2606A、CSC7206A
- PC端QQ登录界面的测试用例
- idea中同一个包中的类相互引用失败