GraphQL 分享 理论篇

前阵子在公司内部分享了GraphQL,今天抽空总结并补充一下:

目前项目开发比较流行的是前台后分离模式,后台提供接口,前台调用接口,接口书写遵循流行的RESTful API规范

  • REST 由 Roy Thomas Fielding 在他2000年的博士论文中提出的。
  • REST,即 Representational State Transfer(表述性状态传递) 的缩写。
  • 如果一个架构符合 REST 原则, 就称它为 RESTful 架构

RESTful API 特点

  • 每一个 URI 代表一种资源;
  • 充分利用 HTTP 协议本身语义;
  • 客户端和服务器器之间,传递这种资源的某种表现层;
  • 客户端通过四个 HTTP 动词,对服务器器端资源进行操作,实现 " 表现层状态转化 " 。

RESTful API 缺陷

  • 一个接口仅操作单一资源
  • 各个资源是独立的,完成一个页面需要调用多个接口
  • 数据冗余,灵活性差
  • 需专门维护文档 (v1, v2)

有时候打开某个页面,我们需要调用多个接口。 有时候我们不需要的字段后台也给我们返回了,这是由后台控制的。

而GraphQL可以完美的解决上面的问题

GraphQL是….

  • Facebook 2012年开发,2015年开源
  • 应用层的API查询语言
  • 在服务端的运行数据查询语言的规范 (我建议你先抽半个小时浏览下心里有个大概)

GraphQL的特点

  • 强类型
  • 单一入口
  • 一个请求获取所有所需资源
  • 内省系统

为什么叫GraphQL

图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。

使用GraphQL 注意的问题

  • 性能问题 (请求少了,但查询多了)
  • GraphQL 在前端如何与视图层、状态管理方案结合
  • 安全, Limit, timeout N+1 查询

关于从规范里提炼的

  • GraphQL是一种数据描述语言,而非编程语言,因此GraphQL缺乏用于描述数学表达式的标点符号。
  • 注释只能用 # ,可以使用末尾的逗号提高可读性。
  • GraphQL的命名是大小写敏感的,也就是说name,Name,和NAME是不同的名字。
  • 一个文档可以包含多个操作和片段的定义。一个查询文档只有包含操作时,服务器才能执行。
  • 如果一个文档只有一个操作,那这个操作可以不带命名或者简写,省略掉query关键字和操作名。

下一篇 实战

参考: http://graphql.org/graphql-js/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

哪个版本的gcc才支持c11

(而我此处的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的)

45320
来自专栏猛牛哥的博客

OpenProcess在某些XP系统上打开进程失败的原因

25440
来自专栏架构之美

五分钟学会Elasticsearch查询代理设计

16140
来自专栏开发技术

WebService与RMI(远程调用方式实现系统间通信)

  本文是《分布式java应用基础与实践》读书笔记;另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容:

65720
来自专栏记事本

Vtiger CRM 7.1 几处SQL注入漏洞分析

干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtiger CRM)进行白盒审...

65620
来自专栏跨界架构师

记一次通过c#运用GraphQL调用Github api

  最近在折腾使用Github api做个微信小程序练练手,本篇文章就是在这个过程中记录。

14620
来自专栏向治洪

Hibernate之初体验

在开始学Hibernate之前,一直就有人说:Hibernate并不难,无非是对JDBC进一步封装。一句不难,难道是真的不难还是眼高手低?       如果...

20170
来自专栏张善友的专栏

使用 ASP.NET Web API 构建超媒体 Web API

超媒体(通常称为应用程序状态的引擎 (HATEOAS))是具象状态传输 (REST) 的主要限制之一。有一种观念认为超媒体项目(如链接或表单)可用于说明客户端如...

30150
来自专栏ml

acm系统开发笔记

时间:     2016/2/29   遇到的困难:  数据库配置的mysql和java(Date)不一致,出现下面错误 1 Date date = new D...

41180
来自专栏喵了个咪的博客空间

phalcon-入门篇9(view层基础使用)

#phalcon-入门篇9(view层基础使用)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供...

32890

扫码关注云+社区

领取腾讯云代金券