这块一开始根本不理解,也许现在也还是不理解……毕竟REST的我都不是很理解,但是毕竟看了这么多天了,也该写点东西了,哪怕理解的是错的,之后回看大概也是有点用的吧。
什么是API
在大学的时候自己东西没做过多少,对API这东西理解就是一个接口,可以传入和获取数据。其实大差不差吧,但是对这东西究竟是怎么实现的,完全不清楚。
年前做了一个返回数据的接口,主要是基于Laravel的API形式来做的,初步对API有了一点了解,就像请求网址获取资源一样嘛,你对API的接口传入了请求的内容,像是资源的序号什么的,它返回给你数据,只不过不像请求网站资源那样返回的是HTML文档而返回的是纯数据罢了。
然后就学到了graphQL,就有点麻了,这是什么东西……为什么还要提前把每个数据字段的类型都定义好,图啥……
graphQL?
按教程里的说法,graphQL应该也算是一种API,就是在表现形式上和REST API差距有点大,简单对比一下两者的区别。
- REST是按请求网络资源的形式来定义的,所以关键字有像是
GET,POST,PATCH,DELETE之类的,而graphQL直接就只有读和写两种(不过我感觉用的大多数还是读比较多吧🤔)。 - REST请求一个数据是整个拖出来的,没办法做到请求某个资源的某几个字段这样去请求,可能会浪费资源,而graphQL可以单独请求数据的某几个字段,精准(就是请求可能会看着很晕,有ES的DSL那种感觉)。
- REST请求多个资源需要访问多个URL(我单独写一个能请求多个资源的URL不行吗,你说是那就是吧),graphQL请求多个资源只需要一个描述,在网络资源受限的情况下表现更好。
大概内容就是这些,还有其他的,如果有用之后再补。
请求结构
我对这块内容不是很理解,因为这部分请求的结构长得很像ES的DSL请求,但我那块其实也是学的半瓶子醋……凑合写一下。
简单来说这东西的请求结构是靠大括号分层的,大概举个例子,像是“中国河北省张家口市桥东区xx小区xx栋xx单元的xxx住户”大概可以抽象出来一个“人”(citizen)的模型,写成graphQL的请求形式大概是这个样子:
{
citizen {
country
province
city
district
community
building
unit
name
}
}
可能有写错的单词,大概理解一下,然后请求到的数据大概是这个样子:
{
"citizen": {
"country": "中国"
"province": "河北省"
"city": "张家口市"
"district": "桥东区"
"community": "xx小区"
"building": "xx栋"
"unit": "xx单元"
"name": "xxx"
}
}
所以可以很清楚的看出来,你的请求是和返回的数据的结构是严格对应的,字段有没有,字段排列的顺序,都是和请求相关的,请求有,结果就有,所以不会有冗余(就是请求可能会写的很长……)。
结尾
这大概就是最基础的理解了,后面还有定义字段类型之类的内容,之后慢慢补充。