dotnet-httpie 0.2.0 Released
dotnet-httpie 0.2.0 Released
Intro
dotnet-httpie 是類 httpie 的一個(gè)調(diào)用 HTTP API 的小工具,可以幫助我們快速測(cè)試 API,語(yǔ)法和 httpie 基本一樣。
第一個(gè)版本發(fā)布之后,做了一些重構(gòu),使用 System.CommandLine 重寫(xiě)了對(duì)于 Option 的支持,并增加了一些新的功能,并且開(kāi)始使用更多的 .NET 6 新特性。
Features
Command Rename
在第一個(gè)版本中,我們是直接使用 http 來(lái)調(diào)用我們的方法,這樣用起來(lái)很方便,但是如果和 httpie 一起使用的話,就會(huì)有一個(gè)被覆蓋掉,為了避免這個(gè)問(wèn)題,在新版本中做了重新命名了,新版本中可以使用 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 的時(shí)候還是保留了之前的用法,有一些小糾結(jié),目前我們?nèi)匀豢梢允褂?http 來(lái)調(diào)用,因?yàn)?docker 容器中不存在命令沖突的問(wèn)題,大家覺(jué)得 docker 中使用 http 好一些還是使用 dotnet-http 更好一些呢?
System.CommandLine
System.CommandLine 可以用來(lái)實(shí)現(xiàn)命令行應(yīng)用程序,很多 dotnet tool 也都是基于它來(lái)實(shí)現(xiàn)的,微軟的 SDK 以及 dotnet-format/dotnet-monitor 也是基于它來(lái)實(shí)現(xiàn)的命令行交互的,如果你也在嘗試做一個(gè)命令行工具,可以考慮一下這個(gè)
JSON Pretty
在新版本,默認(rèn)增加了 JSON 的格式化,當(dāng) Request Body 或者 Response Body 是 Json 的時(shí)候會(huì)自動(dòng)格式化輸出,以更加清晰的展示,也可以通過(guò) --pretty=none 來(lái)禁用格式化
JSON PrettyJSON No-pretty
Auth support
新版本增加了簡(jiǎn)單的 Auth 的支持,目前支持 Basic 認(rèn)證和 JWT Bearer 認(rèn)證
增加了一個(gè)選項(xiàng)參數(shù), --auth/-a 指定 auth 參數(shù),--auth-type/-A 指定 auth 類型(目前支持 Basic/Bearer,默認(rèn)是 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?BearerRawData
我們?cè)谡{(diào)試 API 的時(shí)候,有時(shí)候可能是有一個(gè)測(cè)試的 Request Body,此時(shí)我們可能更加想要直接使用這個(gè) Request Body,在新版本增加一個(gè) --raw 選項(xiàng),來(lái)直接配置 Request Body,類似于 curl 里的通過(guò) -d 指定 body,當(dāng)指定了 --raw 之后,通過(guò) =或者 := 來(lái)指定的 body 的參數(shù)就會(huì)被忽略
使用示例如下:
dotnet-http?:5000/api/values?--raw='{"categoryName":"test",?"parentId":?0}'在 Windows 上使用時(shí)," 需要轉(zhuǎn)義
raw data sampleMore
除了新的功能和代碼優(yōu)化,在 CI 方面也做了一些改善和優(yōu)化,比如我們之前介紹過(guò)的?使用 dotnet format 格式化代碼 以及管理項(xiàng)目的 License header 以及?使用 dotnet-outdated 維護(hù)項(xiàng)目 nuget 包版本
除此之外還有一些 .NET 6 新特性的應(yīng)用比如 .NET 6 中的 Logging Source Generator?在這個(gè)項(xiàng)目中也有應(yīng)用,感興趣的可以探索一下哈~
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
動(dòng)手造輪子 —— dotnet-HTTPie
使用 dotnet format 格式化代碼
dotnet-format一鍵應(yīng)用文件范圍命名空間
File header template
使用 dotnet-outdated 維護(hù)項(xiàng)目 nuget 包版本
.NET 6 中的 Logging Source Generator
總結(jié)
以上是生活随笔為你收集整理的dotnet-httpie 0.2.0 Released的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jenkins构建触发器定时任务
- 下一篇: 技术分享 | 微服务模式下如何高效进行A