使用 dotnet-httpie 执行 http 文件请求
Intro
最近微软在 VS 上开始支持了 http/rest 文件,我们除了 vscode 之外也可以使用 vs 来编辑 http 文件和执行 http 请求了,可以参考: https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-8.0
有时候想命令行执行,不想打开 vs/vscode,于是在之前开发的 dotnet-httpie 小工具上增加了执行 http 文件请求的功能
Sample
Get Started
如下示例,是一个 http 文件里的内容, #
或者 //
表示注释 ,它包含了两个 http 请求,两个请求之前用 ###
分隔开来,
第一个是一个 GET 请求,请求地址是 https://reservation.weihanli.xyz/api/notice
第二个请求是一个 POST 请求, post 一个 json request body 来登录
# Send request to get notice from reservation site
GET https://reservation.weihanli.xyz/api/notice
###
# Sign sparktodo
POST https://sparktodo.weihanli.xyz/api/v2/Account/SignIn
Content-Type: application/json; charset=utf-8
{
"email": "weihanli@outlook.com",
"password": "Test1234"
}
可以看到每个 http request 和请求报文其实是很像的,这样就非常的简洁清晰
Variable
再来看一个使用到变量的示例,可以用 @
来声明变量,如果是在 request 之外的可以被当作是文件级别的变量,如果是在某个 request 内的则只有这个 request 可以使用这个文件,使用变量时使用 {{variableName}}
即可,例子如下:
@baseUrl = https://reservation.weihanli.xyz
###
# @name notice # vs not supported by now
GET {{baseUrl}}/api/notice
Accept: application/json
###
# @name reservationPlaces
@acceptMediaType = application/json
GET {{baseUrl}}/api/ReservationPlaces
Accept: {{acceptMediaType}}
Moreover
目前 vs 的支持比较有限,实用性有点不太够,dotnet-httpie 支持了部分 vscode 插件 RestClient
的功能
Environment Variable Reference
首先我们可以引用环境变量,有一些比较像 api-key/password 等敏感的信息可能会放在环境变量,所以觉得环境变量的引用还是比较常见的,对于环境变量我们可以使用 {{$processEnv envName}}
来引用,觉得 processEnv
有点太长了,也支持使用 env
来代替 processEnv
,示例如下:
GET {{baseUrl}}/api/ReservationPlaces?t={{$env timestamp}}
但是 vscode 的 RestClient 插件并不支持,如果要使用 RestClient 执行请求的话,建议使用 processEnv
Named request
request 支持使用 # @name requestName
或 # @name=requestName
或 // @name requestName
或 // @name=requestName
来指定 request 的 name
# @name reservationPlaces
GET {{baseUrl}}/api/ReservationPlaces
Request reference
request 有了 name 之后,我们可以在后续 request 中引用前面 request 的 response 中的内容,如下所示
@baseUrl = sparktodo.weihanli.xyz
###
# @name login
POST https://sparktodo.weihanli.xyz/api/v2/Account/SignIn
Content-Type: application/json; charset=utf-8
{
"email": "weihanli@outlook.com",
"password": "Test1234"
}
### getVersion
GET https://sparktodo.weihanli.xyz/api/v2/Sync
Authorization: Bearer {{login.response.body.$.data.accessToken}}
这里有两个 request,第一个 request 的 name 是 login
第二个 request 引用了 login
请求的 response body 中的 data.accessToken
字段,并将其作为 Auth 用的 Bearer token,也可以通过 {{requestName.response.headers.headerName}}
引用 response header
dotnet-httpie
使用 dotnet-httpie 执行 http
请求需要使用 0.7.0
及以上版本
dotnet tool update --global dotnet-httpie
安装好之后执行命令如下:
dotnet-http exec HttpStartedSample.http
exec
command 后加 http 文件的路径即可
我们执行一下前面 Request reference 的示例,输出结果如下
More
目前 VSCode RestClient、JetBrains 家的 IDE 和 VS 对 http 文件的支持各异,相对来说感觉 vscode RestClient 的支持更多更完善一些, 更多 RestClient 支持的一些用法可以参考:https://github.com/Huachao/vscode-restclient
希望早点有一个相对统一的规范,这样大家无论使用什么 IDE 在哪里使用能够有一致的体验
通过 request reference, 我们可以使用 http 文件来做一些自动化测试,比如前面的示例,每次先登录获取一个 token 然后借助 token 验证其他的接口
Parse http 文件的代码实现在这里
https://github.com/WeihanLi/dotnet-httpie/blob/dev/src/HTTPie/Implement/HttpParser.cs#L14
有需要的童鞋也可以自取
References
https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-8.0 https://marketplace.visualstudio.com/items?itemName=humao.rest-client https://github.com/Huachao/vscode-restclient https://github.com/WeihanLi/dotnet-httpie https://github.com/WeihanLi/dotnet-httpie/blob/dev/src/HTTPie/Implement/HttpParser.cs https://www.nuget.org/packages/dotnet-HTTPie/absoluteLatest
点击下方卡片关注DotNet NB
一起交流学习
▲ 点击上方卡片关注DotNet NB,一起交流学习
请在公众号后台