GraphQL入门:GraphQL与REST区别的不同举例 - Sithira


当使用REST API标准时, Facebook 注意到其新闻源需要调用多个API端点才能检索所需的所有数据。因此,他们正在寻找一种以可靠的方式在移动设备上以良好性能加载新闻源的方法。
GraphQL是由于这项努力而发明的。它是一种“新查询语言,为REST提供了更有效和强大的替代方法”。它是可以用任何编程语言实现的规范。
一个简单的应用程序需要在屏幕上显示用户名,创建的帖子以及用户的最后3个关注者。
如果我们通过REST执行此任务,则可能需要3个端点,例如:

  1. GET /users/{id}
  2. GET /users/{id}/posts
  3. GET /users/{id}/followers

GraphQL没有多个端点,而是公开了一个端点,并使用它访问服务器上可用的数据。从GraphQL返回的数据的结构是不固定的。客户端从服务器发出的数据请求是通过query,类似于REST中的GET调用

query {
   User(id: "ek33orffi4") {
    name
    age
    posts {
        title
    }
    followers(last: 3){
        name
    }
  }
}

该查询将产生用户的名称,创建的帖子标题和最后3个关注者。在此示例中,“query” 根字段和数据之后是有效负载。该查询以下面所述的JSON格式返回响应。

{
  "data": {
   
"User":{
     
"name": "Sithira",
     
"posts":[

        {
"title" : "GraphQL history"}   ,
        {
"title" : "How to use work form home effectively"}

      ],
     
"followers":[

        {
"name" : "Kate"},
        {
"name" : "Jane"},
        {
"name" : "David"}

      ]
    }
  }
}

GraphQL如何以简单的方式工作?

  1. 客户端发送查询请求以从服务器检索所有人员的姓名。
  2. 然后,服务器使用模式验证请求,并根据合同验证“查询类型”和“人员类型”中的数据。
  3. 如果通过了验证,则服务器将读取查询的有效负载并从数据源(数据库,内存中)中获取所需的信息,并将响应以JSON格式返回给客户端。解析程序负责为每个请求的字段检索正确的数据。

点击标题见原文,包含如何自动化测试GraphQL