dotnet-httpie 0.2.0 Released
Intro
dotnet-httpie 是类 httpie 的一个调用 HTTP API 的小工具,可以帮助我们快速测试 API,语法和 httpie 基本一样。
第一个版本发布之后,做了一些重构,使用 System.CommandLine
重写了对于 Option 的支持,并增加了一些新的功能,并且开始使用更多的 .NET 6 新特性。
Features
Command Rename
在第一个版本中,我们是直接使用 http
来调用我们的方法,这样用起来很方便,但是如果和 httpie 一起使用的话,就会有一个被覆盖掉,为了避免这个问题,在新版本中做了重新命名了,新版本中可以使用 dotnet-http
命令,你也可以使用 dotnet http
,http
=> dotnet-http
/dotnet http
使用示例:
dotnet-http :5000/api/values
dotnet-http localhost:5000/api/values
dotnet-http get localhost:5000/api/valuesdotnet-http get https://reservation.weihanli.xyz/api/notice --body
dotnet-http post /api/notice title=test body=test-body
但是在使用 docker 的时候还是保留了之前的用法,有一些小纠结,目前我们仍然可以使用 http
来调用,因为 docker 容器中不存在命令冲突的问题,大家觉得 docker 中使用 http
好一些还是使用 dotnet-http
更好一些呢?
System.CommandLine
System.CommandLine
可以用来实现命令行应用程序,很多 dotnet tool 也都是基于它来实现的,微软的 SDK 以及 dotnet-format
/dotnet-monitor
也是基于它来实现的命令行交互的,如果你也在尝试做一个命令行工具,可以考虑一下这个
JSON Pretty
在新版本,默认增加了 JSON 的格式化,当 Request Body 或者 Response Body 是 Json 的时候会自动格式化输出,以更加清晰的展示,也可以通过 --pretty=none
来禁用格式化
Auth support
新版本增加了简单的 Auth 的支持,目前支持 Basic 认证和 JWT Bearer
认证
增加了一个选项参数, --auth
/-a
指定 auth
参数,--auth-type
/-A
指定 auth
类型(目前支持 Basic
/Bearer
,默认是 Basic
)
使用示例如下:
dotnet-http "https://reservation.weihanli.xyz/api/Notice?pageNumber=1&pageSize=2" -a='test:test'
dotnet-http "https://reservation.weihanli.xyz/api/Notice?pageNumber=1&pageSize=2" --auth 'test:test'dotnet-http "https://reservation.weihanli.xyz/api/Notice?pageNumber=1&pageSize=2" --auth "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2OWZhZjhlYTlhZDU0ODQ0ODkyMWFkMWVhMjE3ZjdhNyIsInN1YiI6IndlaWhhbmxpQG91dGxvb2suY29tIiwibmFtZWlkIjoiMSIsIm5iZiI6MTY0MzEyNjg0MSwiZXhwIjoxNjQzMTM0MDQxLCJpc3MiOiJodHRwczovL3NwYXJrdG9kby53ZWloYW5saS54eXoiLCJhdWQiOiJUb2tlbkF1ZGllbmNlIn0.80hiaYJ9LMdQlUC71CGHlkPChoVgqkFYP5ysR3YBUnc" --auth-type jwt
dotnet-http "https://reservation.weihanli.xyz/api/Notice?pageNumber=1&pageSize=2" --auth "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2OWZhZjhlYTlhZDU0ODQ0ODkyMWFkMWVhMjE3ZjdhNyIsInN1YiI6IndlaWhhbmxpQG91dGxvb2suY29tIiwibmFtZWlkIjoiMSIsIm5iZiI6MTY0MzEyNjg0MSwiZXhwIjoxNjQzMTM0MDQxLCJpc3MiOiJodHRwczovL3NwYXJrdG9kby53ZWloYW5saS54eXoiLCJhdWQiOiJUb2tlbkF1ZGllbmNlIn0.80hiaYJ9LMdQlUC71CGHlkPChoVgqkFYP5ysR3YBUnc" --auth-type Bearer
dotnet-http "https://reservation.weihanli.xyz/api/Notice?pageNumber=1&pageSize=2" -a "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2OWZhZjhlYTlhZDU0ODQ0ODkyMWFkMWVhMjE3ZjdhNyIsInN1YiI6IndlaWhhbmxpQG91dGxvb2suY29tIiwibmFtZWlkIjoiMSIsIm5iZiI6MTY0MzEyNjg0MSwiZXhwIjoxNjQzMTM0MDQxLCJpc3MiOiJodHRwczovL3NwYXJrdG9kby53ZWloYW5saS54eXoiLCJhdWQiOiJUb2tlbkF1ZGllbmNlIn0.80hiaYJ9LMdQlUC71CGHlkPChoVgqkFYP5ysR3YBUnc" -A Bearer
RawData
我们在调试 API 的时候,有时候可能是有一个测试的 Request Body,此时我们可能更加想要直接使用这个 Request Body,在新版本增加一个 --raw
选项,来直接配置 Request Body,类似于 curl 里的通过 -d
指定 body,当指定了 --raw
之后,通过 =
或者 :=
来指定的 body 的参数就会被忽略
使用示例如下:
dotnet-http :5000/api/values --raw='{"categoryName":"test", "parentId": 0}'
在 Windows 上使用时,
"
需要转义
More
除了新的功能和代码优化,在 CI 方面也做了一些改善和优化,比如我们之前介绍过的 使用 dotnet format 格式化代码 以及管理项目的 License header 以及 使用 dotnet-outdated 维护项目 nuget 包版本
除此之外还有一些 .NET 6 新特性的应用比如 .NET 6 中的 Logging Source Generator 在这个项目中也有应用,感兴趣的可以探索一下哈~
References
https://github.com/WeihanLi/dotnet-httpie/tree/0.2.0
https://www.nuget.org/packages/dotnet-httpie/0.2.0
https://hub.docker.com/repository/docker/weihanli/dotnet-httpie
动手造轮子 —— dotnet-HTTPie
使用 dotnet format 格式化代码
dotnet-format一键应用文件范围命名空间
File header template
使用 dotnet-outdated 维护项目 nuget 包版本
.NET 6 中的 Logging Source Generator