GraphQL与REST的区别(总结)
详细解释:https://blog.youkuaiyun.com/belalds/article/details/88640407
1、资源(Resources)
相同点:
- 都有资源这个概念,而且都能通过ID去获取资源。
- 都可以通过HTTP GET方式来获取资源。
- 都可以使用JSON作为响应格式。
差异点:
- 在REST中,你所访问的路径就是该资源的唯一标识(ID);在GraphQL中,该标识与访问方式并不相关
- 在REST中,资源的返回结构与返回数量是由服务端决定;在GraphQL,服务端只负责定义哪些资源是可用的,由客户端自己决定需要得到什么资源
2、路由(URL Route) vs. GraphQL Schema
REST对数据的描述形式是一连串的URL端点,而GraphQL则是由相互之间有所关联的schema组成。
相同点:
- REST API的URL端点列表与GraphQL的Query/Mutation中的字段类似,都表示数据的访问入口。
- 都能用不同的方式描述一个API请求到底是读操作还是写操作。
差异点:
- GraphQL让你可以通过一个资源入口访问到关联的其他资源,只要事先在schema中定义好资源之间的关系即可;而REST则提供了多个URL端点来获取相关的资源。
- 在GraphQL中,Query类型可以在一个请求的根节点中被访问,除此以外它跟其他类型没有区别,比如你也可以对一个query中的字段添加参数。而在REST中,即使响应结果是嵌套关系,但在请求中并没有嵌套的概念。
- REST使用POST这样的HTTP方法名称来定义写操作,GraphQL则是查询结构中的关键字。
3、路由处理器(Route Handlers)vs. 解析器(Resolvers)
REST和GraphQL都提供了很好的API调用方式。如果你对如何构建一个REST API足够熟悉,使用GraphQL来实现同样的API功能对你来说并不是一件难事。但GraphQL的一大优势是让你可以在不需要发起多次请求的情况下调用多个函数来获取资源数据。
相同点:
- REST的端点与GraphQL查询字段都在服务端调起函数执行。
- REST和GraphQL都使用框架和类库来进行一些通用的网络协议处理。
差异点:
- 一个REST请求对应一个路由处理器(Route Handler),而一个GraphQL的请求可以唤起多个解析器(Resolver)在一次响应中访问多种资源。
- REST需要你自己构建整个请求的响应,而GraphQL的请求响应是由查询方指定结构、并由GraphQL进行构建组装的。