初步了解graphQL

这块一开始根本不理解,也许现在也还是不理解……毕竟REST的我都不是很理解,但是毕竟看了这么多天了,也该写点东西了,哪怕理解的是错的,之后回看大概也是有点用的吧。

什么是API

在大学的时候自己东西没做过多少,对API这东西理解就是一个接口,可以传入和获取数据。其实大差不差吧,但是对这东西究竟是怎么实现的,完全不清楚。

年前做了一个返回数据的接口,主要是基于Laravel的API形式来做的,初步对API有了一点了解,就像请求网址获取资源一样嘛,你对API的接口传入了请求的内容,像是资源的序号什么的,它返回给你数据,只不过不像请求网站资源那样返回的是HTML文档而返回的是纯数据罢了。

然后就学到了graphQL,就有点麻了,这是什么东西……为什么还要提前把每个数据字段的类型都定义好,图啥……

graphQL?

按教程里的说法,graphQL应该也算是一种API,就是在表现形式上和REST API差距有点大,简单对比一下两者的区别。

  1. REST是按请求网络资源的形式来定义的,所以关键字有像是GET,POST,PATCH,DELETE之类的,而graphQL直接就只有读和写两种(不过我感觉用的大多数还是读比较多吧🤔)。
  2. REST请求一个数据是整个拖出来的,没办法做到请求某个资源的某几个字段这样去请求,可能会浪费资源,而graphQL可以单独请求数据的某几个字段,精准(就是请求可能会看着很晕,有ES的DSL那种感觉)。
  3. 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"
    }
}

所以可以很清楚的看出来,你的请求是和返回的数据的结构是严格对应的,字段有没有,字段排列的顺序,都是和请求相关的,请求有,结果就有,所以不会有冗余(就是请求可能会写的很长……)。

结尾

这大概就是最基础的理解了,后面还有定义字段类型之类的内容,之后慢慢补充。