当前位置: 代码迷 >> 综合 >> dotnet-httpie 0.2.0 Released
  详细解决方案

dotnet-httpie 0.2.0 Released

热度:61   发布时间:2024-01-12 06:48:50.0

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 httphttp => 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 来禁用格式化

43c6728154ce5fba21ef3b300db3008d.png

JSON Pretty

7de3b68be91255fb472cbca4caf74116.png

JSON No-pretty

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

f02cf780cf1d4ce9cd20aae65c95a352.png

d81f114eee508c2b5b576d46010b90dd.png

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 上使用时," 需要转义

9735bf7cb63f08d023ecfe439a36d667.png

raw data sample

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