当前位置:首页 > 问答 > 正文

一起动手用Postman试试GraphQL,看看能不能顺利调通接口啥的

咱们得有个能用的 GraphQL 接口地址,不能凭空瞎试,我找了个公开的、免费的用来测试的 GraphQL API,地址是 https://swapi-graphql.netlify.app/.netlify/functions/index,这个是星球大战(Star Wars)的 API,里面有很多电影、人物、星球的信息,拿来练手最合适不过了。(来源:公开的 SWAPI GraphQL API)

第一步:打开 Postman,创建一个新请求

这个没啥好说的,打开你的 Postman,点那个“New”按钮,然后选择“HTTP Request”,就会出来一个我们熟悉的界面,有请求方法(GET, POST)、请求地址(URL)那些。

第二步:设置请求方法和地址

这里是个关键点,GraphQL 通常都是通过 POST 请求来操作的,哪怕你只是想查询数据,首先把请求方法从默认的 GET 改成 POST

然后把上面那个星球大战的 API 地址 https://swapi-graphql.netlify.app/.netlify/functions/index 粘贴到地址栏里。

第三步:设置请求头(Headers)

光有方法和地址还不够,我们得告诉服务器:“喂,我这次发给你的数据是 GraphQL 格式的哦,你按这个格式来理解。” 这就需要设置一个特殊的请求头。

点击 URL 地址栏下面的“Headers”标签,我们来添加两个键值对:

  1. Key: Content-Type Value: application/json 这个很重要,意思是告诉服务器,我请求体(Body)里装的是 JSON 格式的数据。
  2. Key: User-Agent Value: 可以随便写一个,PostmanGraphQLTest,有时候服务器会要求有这个头,写上保险点。

设置好之后,应该看起来像这样: Content-Type | application/json User-Agent | PostmanGraphQLTest

一起动手用Postman试试GraphQL,看看能不能顺利调通接口啥的

第四步:最重要的部分——写请求体(Body)

点击“Body”标签,然后选择“raw”,在旁边下拉菜单里选择“JSON”,现在这个大白框就是我们发挥的地方了。

GraphQL 的请求体就是一个 JSON 对象,它最核心的有两个字段:queryvariables(变量我们先不管,今天就玩最简单的)。

query 字段的值是一个字符串,这个字符串里面就是我们用 GraphQL 查询语言写的“问题”,咱们来写第一个查询试试。

我们想查询一下星球大战里所有电影的标题和导演,在 GraphQL 里,这个查询语句长这样:

query {
  allFilms {
    films {
      title
      director
    }
  }
}

解释一下这句“咒语”:

  • query 关键字表示这是一个查询操作。
  • allFilms 是我们要查询的一个“字段”,这个字段代表所有电影。
  • filmsallFilms 下面的一个子字段,因为所有电影是个列表嘛。
  • films 里面,我们指定想要返回的具体信息,title)和 director(导演),你想要什么就写什么,不写的它就不会返回,这叫“按需索取”,是 GraphQL 的一大优点。

我们要把这个查询语句放到 Postman 的 Body 里,注意,它是作为 JSON 中一个字符串的值存在的,完整的 Body 应该是:

一起动手用Postman试试GraphQL,看看能不能顺利调通接口啥的

{
  "query": "query { allFilms { films { title director } } }"
}

为了好看,你也可以把它写成多行(Postman 支持),但记得要用引号包起来:

{
  "query": "
    query {
      allFilms {
        films {
          title
          director
        }
      }
    }
  "
}

(注意:在实际粘贴时,多行字符串可能需要确保没有多余的换行符错误,如果报错,就先缩成一行试试,但新版 Postman 对多行 JSON 字符串支持通常很好。)

第五步:点击“Send”发送请求!

激动人心的时刻到了!检查一下:

  • 方法:POST
  • URL:正确
  • Headers:有 Content-Type: application/json
  • Body:是 Raw JSON,里面包含了我们的 query

没问题就大胆地点那个蓝色的“Send”按钮!

第六步:查看结果

如果一切顺利,你会在下面的响应体(Response Body)里看到一个 JSON 格式的结果,它应该长得像这样:

一起动手用Postman试试GraphQL,看看能不能顺利调通接口啥的

{
  "data": {
    "allFilms": {
      "films": [
        {
          "title": "A New Hope",
          "director": "George Lucas"
        },
        {
          "title": "The Empire Strikes Back",
          "director": "Irvin Kershner"
        },
        ... // 还有其他电影信息
      ]
    }
  }
}

看!成功啦!服务器准确地返回了我们想要的两样东西:每部电影的标题和导演,结构非常清晰,和我们写的查询语句的形状是一模一样的。

再来试一个:查询特定人物

光查电影不过瘾,我们试试查个人物,我们想看看卢克·天行者(Luke Skywalker)的身高和出生星球叫什么名字。

查询语句可以这样写:

query {
  person(personID: "1") {
    name
    height
    homeworld {
      name
    }
  }
}

这里新东西是 person(personID: "1"),括号里的就是传递参数,表示我要查询 ID 为 1 的人物。homeworld 又是一个对象,所以我们继续点出里面的 name 字段。

同样,把这个查询放到 Body 的 query 字符串里:

{
  "query": "query { person(personID: \"1\") { name height homeworld { name } } }"
}

(注意:如果字符串里本身有双引号,需要用反斜线 \ 转义,写成 \",用上面那种多行格式写就不需要转义,会更方便。)

再点击“Send”,你应该会得到卢克的信息,包括他的名字、身高,以及他的家乡星球的名字“Tatooine”。

好了,到这里,我们已经用 Postman 成功调通了两个 GraphQL 查询接口了!整个过程其实就是:用 POST 方法,发一个带有 query 字段的 JSON 到指定地址,你可以随意修改查询语句,要什么数据就写什么字段名,体验一下 GraphQL 这种“精准查询”的灵活性,试试把 height 去掉,或者加上 eyeColor(眼睛颜色),看看返回的结果有什么不同,玩得开心!