前言

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),类似于持续演进(相互借鉴)的FlowTypeScript,用来描述你的数据,先看官网的例子(细节再议)

特性

  • 强类型GraphQL与 C 和 Java 等后端语言相得益彰,服务端能对响应的形状和性质做出一定保证,而RESTful是弱类型的,缺少机器可读的元数据;
  • 分工GraphQL让服务端定义好支持哪些Queries,把对数据的Query需求下放到客户端管理,分工明确的同时保持对 API 的聚焦;
  • 分层GraphQLQuery本身是一组分层的字段,查询就像返回的数据一样,是一种产品(工程师)描述数据和需求的自然方式;(PS:部分翻译的,国外好像都把产品叫做 Product Engineers 而不是 Product Manager。感觉在吐槽的样子)
  • 预测性GraphQLQuery只返回客户端要求的内容,没有任何冗余(不浪费流量),而且它只有一个接口地址,由此衍生了另一个特性;
  • 兼容性:需求变动带来的新增字段不影响老客户端,服务端再也不需要版本号了,极大简化了兼容问题;(App 通常是 1-2 周的固定周期发版,在原生应用不强制升级的世界里,会出现用户 1-2 年都不升级的情况。 这意味可能同时有 52 个版本的客户端查询我们的服务端,而在 Fackbook 中 GraphQL API 曾支持了横跨 3 年的移动端)
  • 自检性GraphQL能在执行Query之前(即在开发时)提供描述性错误消息,在给定查询的情况下,工具可以确保其句法是正确有效的,这使得构建高质量的客户端变得更加容易;
  • Doc & MockGraphQL的文档永远和代码同步,开发无需维护散落多处的文档,调用者也无需担心过期问题,而且基于类型系统的强力支撑和 graphql-tools,mocking 会变得无比容易

生态

https://github.com/chentsulin/awesome-graphql

价值

GraphQL主要是作用于数据接口,比如前端后端交互。是给客户端筛选自由获取服务端事先定义好的数据,后端使用了GraphQL之后,数据库查出来A,B,C,D四个字段,客户端需要数据的时候,你可以随意使用这四个字段的各种组合,只要A,C字段还是只要A,C,D字段等等,不再需要和服务端交流。

什么是 GraphQL?相关推荐

  1. 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能

    相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制 完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询 自APIJSON发 ...

  2. 【译】GraphQL vs. REST

    原文地址:GraphQL vs. REST 原文作者:Sashko Stubailo 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandus ...

  3. fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作

    fcm和firebase In a previous post I confessed defeat in attempting to get an AWS Lambda GraphQL server ...

  4. 如何使用FaunaDB + GraphQL

    I have one or two projects I maintain on Netlify, in addition to hosting my blog there. It's an easy ...

  5. 我希望支持JavaScript GraphQL实现的API

    The GraphQL schema language is great! It is certainly the best way to communicate anything about a G ...

  6. graphql是什么_为什么GraphQL是避免技术债务的关键

    graphql是什么 GraphQL (not to be confused with GraphDB or Open Graph or even an actual graph) is a rema ...

  7. graphql_普通英语GraphQL指南

    graphql by Luis Aguilar 路易斯·阿吉拉尔(Luis Aguilar) 普通英语GraphQL指南 (A Guide to GraphQL in Plain English) 您 ...

  8. react 错误边界_React with GraphQL和错误边界中的自定义错误页面

    react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...

  9. java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器

    java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...

  10. graphql redux_如何在Redux应用程序中使用GraphQL

    graphql redux by Howon Song 通过宋颂恩 如何在Redux应用程序中使用GraphQL (How to use GraphQL in your Redux app) Fetc ...

最新文章

  1. Error in terms.formula(formula, data = data) : invalid model formula in ExtractVars
  2. 开发日记-20190914 关键词 汇编语言王爽版 第六章
  3. centos7下端口映射
  4. [C++] 前置++与后置++
  5. JavaScript系列:模块化与链式编程
  6. (原)ubuntu上安装Torch7及nn及dpnn
  7. 极客爱情 2.4 | 和程序员男友过节是这样的
  8. 《计算机系统基础》复习——简答题 01
  9. MySQL卸载不干净-MySQL Connector Net xxx文件怎么也删除不了?一招解决它
  10. Android PackageManagerService(三)pm命令安装流程详解
  11. centos linux系统后门程序
  12. 用AI对抗AI!教代码调戏深度学习算法生成的假视频
  13. 费解的开关 Java
  14. 关于微信公众号支付接口开发遇到的奇葩问题,始终返回get_brand_wcpay_request:fail。
  15. 学习经验分享之四:YOLOv7学习心得
  16. linux vim 命令无效,Linux vim 命令 command not found vim 命令详解 vim 命令未找到 vim 命令安装 - CommandNotFound ⚡️ 坑否...
  17. JDK下载及安装教程(很详细)
  18. YD2606A、CSC7206A
  19. PC端QQ登录界面的测试用例
  20. idea中同一个包中的类相互引用失败

热门文章

  1. console用法java_Java Console printf(String, Object)用法及代码示例
  2. 浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现
  3. 5.Numpy数组中数据的抽取
  4. 10大炫酷的HTML5文字动画特效欣赏
  5. Miniconda在服务器上的安装与使用
  6. 黑马代码生成器2.5
  7. js创建节点及节点操作
  8. 华为手机怎么用云歌_华为手机语音助手怎么使用 看完你就知道了
  9. 幻想乡三连C:狂飙突进的幻想乡
  10. 微服务分布式架构中,如何实现日志链路跟踪?