有了HTTP Client,Postman统统丢掉
写 Web 后端时,总是要开个 Postman。调试时候 Postman 和 IDE 一直切来切去的让我很不舒服。我就想着 Goland 有没有类似于这种软件的插件用,就去网上搜了一下。一搜发现居然 Jetbrains 家的 IDE 都自带这个插件,真的太良心了。应该都有把,至少 Goland 有,叫 HTTP Client。这个是通过编写.http文件的方式来执行对于的请求。文件的格式与 HTTP 报文类似,很容易上手。而且还可以给每个请求添加特定脚本实现一些自动化的功能。虽说 Postman 功能与这个插件类似,但是我感觉这个可以直接在 IDE 中可以直接执行,且在多人合作开发时可以在 clone 时下载使用不用另行配置非常便利。所以我直接转来使用这个插件了。这里也有 Jetbrains 的官方文档,可以配合一起学习使用。
首先我们可以来看一个最简单的例子来了解一下大致样子。假设本地的8080端口有一个登录接口,我们使用 Post 方法请求并将用户账户名与密码通过 Json 传递给后台。
1 | POST http://127.0.0.1:8080/users/sessions |
第一行是使用的 HTTP 请求方法与 URL。而第二行是此次请求的请求头。因为要传递 Json 数据,所以将 Content-Type
设置为 application/json
。若要发送 Form
表单则使用 x-www-form-ulencoded
。继续往下看使用空行隔开来的就是我们发送的请求体,这里将我们的账号与密码传输至后端。而最后一行的###
是 HTTP Client 的分隔符,用于分隔多个请求。而注释则是和其他大多数语言一样使用//
或#
。
在最开始时还说过 HTTP Client 是支持给每个请求添加脚本的。而脚本我们可以使用> {%%}
包裹,将语句写在百分号之间。 脚本是使用原生的 Javascript 来编写的,所以还是非常灵活的。比如在登录后,服务端会返回给我们一个 JWT 作为账户的登录认证。后续的每次请求时我们都应该将 JWT 返回给服务端已验证身份。这时候我们就可以写一个脚本来将服务端返回的 JWT 存储到一个全局变量中,以供后续发送的请求使用。在 HTTP Client 中,引用一个变量的方法是将变量名用两对大括号包裹着即可。还是继续使用上面登录这个例子,可以这样来编写脚本。
1 | # 以下是 HTTP Client 的代码 |
脚本中的client.global.set()
是用于在请求之间实现数据的全局共享的。而其第一个参数是全局变量的变量名,第二个则是变量的值。在此处我们使用 response.body.user.token
获取了服务端返回数据中 user 下 token 的值。body后所写的应根据返回的不同自行修改。
对于有些测试的数据为了方便修改或是安全问题,我们还可以创建运行环境来进行管理。环境文件总共有两种分别是 http-client.env.json
与 http-client.private.env.json
。故名思意,一般我们将比较隐私的数据可以声明在 private 那个文件中。而在使用 Git 等工具时,这个文件会被标记为 ignore。若是使用 IDE 自动生成的文件会将大致结构生成出来。而 dev
就是环境的名称,我们将环境所拥有的值嵌套进其的 Value 中。一个文件中可以定义多个环境。特别注意我们变量的 Value 的类型只能使用 String 或者 Bool,不能使用 Int 之类的。
1 | { |
使用这个后我们就可以对我们以上的请求进行优化了,比如每个人运行后 url 的 host 与他人可能会不同,我们就可以在环境中配置好自己的 host。
1 | # 以下是 http-client.http 中的代码 |
在文章最后推荐一个拓展插件,名叫 Import frome Postman Collections
。文章标题不是叫 Postman 统统丢掉嘛,这个插件就是用来将 Postman 中已经配置好的接口导入到 http-client.http 文件中用的。导入后即可直接使用非常方便。使用的方法在插件的介绍页面就有,导入的文件是 Postman 使用导出功能所导出的那个 Json 文件,具体不复杂就在这不多说了。