发布于 

有了HTTP Client,Postman统统丢掉

写 Web 后端时,总是要开个 Postman。调试时候 Postman 和 IDE 一直切来切去的让我很不舒服。我就想着 Goland 有没有类似于这种软件的插件用,就去网上搜了一下。一搜发现居然 Jetbrains 家的 IDE 都自带这个插件,真的太良心了。应该都有把,至少 Goland 有,叫 HTTP Client。这个是通过编写.http文件的方式来执行对于的请求。文件的格式与 HTTP 报文类似,很容易上手。而且还可以给每个请求添加特定脚本实现一些自动化的功能。虽说 Postman 功能与这个插件类似,但是我感觉这个可以直接在 IDE 中可以直接执行,且在多人合作开发时可以在 clone 时下载使用不用另行配置非常便利。所以我直接转来使用这个插件了。这里也有 Jetbrains 的官方文档,可以配合一起学习使用。

首先我们可以来看一个最简单的例子来了解一下大致样子。假设本地的8080端口有一个登录接口,我们使用 Post 方法请求并将用户账户名与密码通过 Json 传递给后台。

1
2
3
4
5
6
7
8
9
POST http://127.0.0.1:8080/users/sessions
Content-Type: application/json

{
"username": "Char",
"password": "P4ssw@rld"
}

###

第一行是使用的 HTTP 请求方法与 URL。而第二行是此次请求的请求头。因为要传递 Json 数据,所以将 Content-Type 设置为 application/json。若要发送 Form 表单则使用 x-www-form-ulencoded。继续往下看使用空行隔开来的就是我们发送的请求体,这里将我们的账号与密码传输至后端。而最后一行的###是 HTTP Client 的分隔符,用于分隔多个请求。而注释则是和其他大多数语言一样使用//#

在最开始时还说过 HTTP Client 是支持给每个请求添加脚本的。而脚本我们可以使用> {%%}包裹,将语句写在百分号之间。 脚本是使用原生的 Javascript 来编写的,所以还是非常灵活的。比如在登录后,服务端会返回给我们一个 JWT 作为账户的登录认证。后续的每次请求时我们都应该将 JWT 返回给服务端已验证身份。这时候我们就可以写一个脚本来将服务端返回的 JWT 存储到一个全局变量中,以供后续发送的请求使用。在 HTTP Client 中,引用一个变量的方法是将变量名用两对大括号包裹着即可。还是继续使用上面登录这个例子,可以这样来编写脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 以下是 HTTP Client 的代码
POST http://127.0.0.1:8080/users/sessions
Content-Type: application/json

{
"username": "Char",
"password": "P4ssw@rld"
}

> {%
client.global.set("token", response.body.user.token)
%}

###
GET http://127.0.0.1:8080/users
Authorization: Bearer {{token}}

###

# 以下是服务端返回的数据
{
"status": "success",
"message": "登录成功",
"user": {
"username": "Char",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
}

脚本中的client.global.set()是用于在请求之间实现数据的全局共享的。而其第一个参数是全局变量的变量名,第二个则是变量的值。在此处我们使用 response.body.user.token 获取了服务端返回数据中 user 下 token 的值。body后所写的应根据返回的不同自行修改。

对于有些测试的数据为了方便修改或是安全问题,我们还可以创建运行环境来进行管理。环境文件总共有两种分别是 http-client.env.jsonhttp-client.private.env.json。故名思意,一般我们将比较隐私的数据可以声明在 private 那个文件中。而在使用 Git 等工具时,这个文件会被标记为 ignore。若是使用 IDE 自动生成的文件会将大致结构生成出来。而 dev 就是环境的名称,我们将环境所拥有的值嵌套进其的 Value 中。一个文件中可以定义多个环境。特别注意我们变量的 Value 的类型只能使用 String 或者 Bool,不能使用 Int 之类的。

1
2
3
4
5
{
"dev": {
"name": "value"
}
}

使用这个后我们就可以对我们以上的请求进行优化了,比如每个人运行后 url 的 host 与他人可能会不同,我们就可以在环境中配置好自己的 host。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 以下是 http-client.http 中的代码
POST http://{{host}}:{{port}}/users/sessions
Content-Type: application/json

{
"username": {{username}},
"password": {{password}}
}

> {%
client.global.set("token", response.body.user.token)
%}

###

# 以下是 http-client.private.env.json 中的代码
{
"dev": {
"host": "127.0.0.1",
"port": "8080",
"username": "Char",
"password": "P4ssw@rld"
}
}

在文章最后推荐一个拓展插件,名叫 Import frome Postman Collections。文章标题不是叫 Postman 统统丢掉嘛,这个插件就是用来将 Postman 中已经配置好的接口导入到 http-client.http 文件中用的。导入后即可直接使用非常方便。使用的方法在插件的介绍页面就有,导入的文件是 Postman 使用导出功能所导出的那个 Json 文件,具体不复杂就在这不多说了。