RESTful和GraphQL的比较

对于前后端分离的项目,后端通常把数据接口定义成RESTful API或者GraphQL,可以把RESTful和GraphQL理解成是浏览器与服务器通信方式的一种设计风格,那么两者有什么不同呢?

一,RESTful API:

RESTful API常见的请求方式有   get:查询数据;post:添加数据;put:更新数据;delete:删除数据

不足:

  •  扩展性不足

一个接口有可能因为需求变更而变的越来越臃肿,比如获得用户信息的接口/user/userid,刚开始可能只有用户id、用户名称,但是随着需求的变更可能还会有用户年龄,职业,地址等等信息,而一个前端页面可能只需要其中一部分信息,这无疑增加了网络传输量,前端获得很多不必要的信息。

  • 数据聚合问题

一个前端页面如果即需要展示用户信息,又需要展示用户评论信息,这时后端就要先查询用户信息,再查询用户评论信息,最后合并到一起返回给前端,而对于后端来说查询的接口越多意味着耗时越长。

对于RESTful API存在的问题,使用GraphQL可以有效避免。

二,GraphQL:

GraphQL是Facebook开源的API查询语言。

优点:

  • 所见即所得

查询的结果就是输入查询结构的精准映射

查询:

{
    user(uid:1) {
        uid
        name
    }
}

返回:

{
  "data": {
    "user": {
      "uid": "1",
      "name": "xxx"
    }
  }
}
  • 没有数据聚合问题

如果查询的数据结构是有从属的,可以一次返回

{
    article(aid:1) {
        title
        content
        author {
            uid
            name
        }
    }
}

即使查询的数据结构直接可能没有从属,也可以一次返回

{
    article(aid:1) {
        title
        content
        author {
            uid
            name
        }
    },
    comment {
        content,
        author {
            uid
            name
        }
    }
}
  • 代码即文档

    GraphQL会把schema定义和相关的注释生成可视化的文档,从而使得代码的变更,直接就反映到最新的文档上,避免RESTful中手工维护可能会造成代码、文档不一致的问题。

  • 参数类型强校验

    RESTful方案本身没有对参数的类型做规定,往往都需要自行实现参数的校验机制,以确保安全。

    但GraphQL提供了强类型的schema机制,从而天然确保了参数类型的合法性。

发布了54 篇原创文章 · 获赞 0 · 访问量 7689

猜你喜欢

转载自blog.csdn.net/yuyongkun4519/article/details/103597936
今日推荐