RESTful和GraphQL通俗理解:对于前后端分离的项目,后端通常把数据接口定义成RESTful API或者GraphQL,可以把RESTful和GraphQL理解成是浏览器与服务器通信方式的一种设计风格。
-
REST API请求的的生命周期:
(1) 服务器收到请求并提取出HTTP方法名(比如这里就是GET方法)与URL路径
(2) API框架找到提前注册好的、请求路径与请求方法都匹配的代码
(3) 该段代码被执行,并得到相应结果
(4) API框架对结果进行序列化,添加上适当的状态码与响应头后,返回给客户端 -
服务器对一个GraphQL请求的执行过程:graphql
(1) 服务器收到HTTP请求,取出其中的GraphQL查询
(2) 遍历查询语句,调用里面每个字段所对应的Resolver。在这个例子里,只有Query这个类型中的一个字段hello
(3) Resolver函数被执行并返回相应结果
(4) GraphQL框架把结果根据查询语句的要求进行组装
schema: 服务端定义的API接口,本质上是一个类型系统
(1) graphql在对象上选取字段,如果这个字段返回的又是一个对象,你可以在它里面继续选取字段。
(2) graphql查询的方式是声明式的,在查询语言里声明需要什么形状的数据,服务器就会返回什么形状的结果。
DOCS以一种用户友好的方式展现API
命名冲突问题:
之前省略了operation type(操作类型: {}前默认为query)和operation name(操作名字),如果没有operation name,它就像javascript里的匿名函数一样,可以使用它,但很难定位它。例如很多query没有命名的话,在调试或在服务器日志里,我们看到query,但不知道名字,很难定位其在代码的哪个地方使用,起个有意义的名字可以更好的帮助查询。除了query还有两种:
mutation: 用于修改数据
subscription: 用于订阅数据修改
mutation: 用于修改数据