Contents

Postman测试GraphQL

1. 概述

在这个简短的教程中,我们将展示如何使用 Postman 测试 GraphQL 端点。

2. 模式概述和方法

我们将使用在GraphQL 教程中创建的端点。提醒一下,模式包含描述帖子和作者的定义:

type Post {
    id: ID!
    title: String!
    text: String!
    category: String
    author: Author!
}
 
type Author {
    id: ID!
    name: String!
    thumbnail: String
    posts: [Post]!
}

另外,我们还有显示帖子和编写新帖子的方法:

type Query {
    recentPosts(count: Int, offset: Int): [Post]!
}
 
type Mutation {
    writePost(title: String!, text: String!, category: String) : Post!
}

使用突变保存数据时,必填字段用感叹号标记。另请注意,在我们的Mutation中,返回的类型是Post,但在 Query 中,我们将获得Post对象的列表。

上面的模式可以在 Postman API 部分加载——只需添加带有 GraphQL 类型的New API并按 Generate Collection

/uploads/graphql_postman/1.jpg

加载架构后,我们可以使用 Postman 对 GraphQL 的自动完成支持轻松编写示例查询

3. Postman 中的 GraphQL 请求

首先,Postman 允许我们以GraphQL 格式发送正文——我们只需选择下面的 GraphQL 选项:

/uploads/graphql_postman/3.jpg

然后,我们可以编写一个原生 GraphQL 查询,比如将titlecategoryauthor name放入 QUERY 部分:

query {
    recentPosts(count: 1, offset: 0) {
        title
        category
        author {
            name
        }
    }
}

结果,我们将得到:

{
    "data": {
        "recentPosts": [
            {
                "title": "Post",
                "category": "test",
                "author": {
                    "name": "Author 0"
                }
            }
        ]
    }
}

也可以使用 raw 格式发送请求,但我们必须将Content-Type: application/graphql 添加到 headers 部分。而且,在这种情况下,身体看起来是一样的。

例如,我们可以更新title、text、category,获取idtitle作为响应:

mutation {
    writePost (
        title: "Post", 
        text: "test", 
        category: "test",
    ) {
        id
        title
    }
}

只要我们使用简写语法,就可以从查询主体中省略操作类型(如查询和 变异)。在这种情况下,我们不能使用操作和变量的名称,但建议使用操作名称,以便于记录和调试。

4. 使用变量

在变量部分,我们可以创建一个 JSON 格式的模式,为变量赋值。这避免了在查询字符串中输入参数:

/uploads/graphql_postman/5.jpg

因此,我们可以修改 QUERY 部分中的recentPosts正文以动态分配变量的值:

query recentPosts ($count: Int, $offset: Int) {
    recentPosts (count: $count, offset: $offset) {
        id
        title
        text
        category
    }
}

我们可以编辑 GRAPHQL VARIABLES 部分,使用我们希望将变量设置为的内容:

{
  "count": 1,
  "offset": 0
}