Flurl:一种优雅的方式处理 RESTful API

Flurl 简介

官方介绍,Flurl是一个现代化的,流畅的,支持异步的URL增强和Http客户端组件。 

1. Url 构建

假如我们有一个登录的接口,如下:

https://www.some-api.com/login?name=UserName&pwd=123456

当我们处理这个uri 地址的时候,首先会拼接 login, 然后拼接?号, 最后拼接参数,另外中间还要拼接& 得到最终的地址。

如果使用 Flurl 构建,首先需要通过 Nuget 安装 Flurl 组件,引用完成后,编写下面的代码。

var url = "http://www.some-api.com"
           .AppendPathSegment("login")
           .SetQueryParams(new
           {
               name = "UserName",
               pwd = "

这非常简单,它最简单的Get请求,另外我们也可以使用 Uri 的扩展方法,如下

var url = new Uri("http://www.some-api.com").AppendPathSegment(...

2. Http 增强

Flurl 是模块化的,所以首先还需要安装 Flurl.Http

using Flurl;
using Flurl.Http;

var result = await "http://www.some-api.com".AppendPathSegment("login").GetAsync();

上面的代码会发送一个GET请求,并返回一个IFlurlResponse,可以得到 StatusCode,Headers等,也可以通过 GetStringAsync 和 GetJsonAsync 得到响应内容。

如果只是想获取响应内容,我们看看 Flurl 有多简单:

T poco = await "http://api.foo.com".GetJsonAsync<T>();
string text = await "http://site.com/readme.txt".GetStringAsync();
byte[] bytes = await "http://site.com/image.jpg".GetBytesAsync();
Stream stream = await "http://site.com/music.mp3".GetStreamAsync();

Post提交

await "http://api.foo.com".PostJsonAsync(new { a = 1, b = 2 });

动态类型 dynamic

dynamic d = await "http://api.foo.com".GetJsonAsync();

设置请求标头:

await url.WithHeader("Accept", "text/plain").GetJsonAsync();

await url.WithHeaders(new { Accept = "text/plain", User_Agent = "Flurl" }).GetJsonAsync();

基础身份验证

await url.WithBasicAuth("username", "password").GetJsonAsync();

OAuth 2.0

await url.WithOAuthBearerToken("mytoken").GetJsonAsync();

表单提交

await "http://site.com/login".PostUrlEncodedAsync(new { 
    user = "user", 
    pass = "pass"
});

3 . HttpClient 管理

程序中,通常不会创建太多的 HttpClient, 因为过多的连接会耗尽服务器资源,然后会抛出 SocketException 异常,所以大部分情况还是使用 HttpClientFactory。

在 Flurl 库中,内部管理了 HttpClient实例,  通常一个主机Host,会创建一个HttpClient,然后缓存来进行复用。

另外,Flurl 也很好的支持了IOC容器,你也可以在依赖注入中使用它。

Flurl 组件让Http操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档。 

项目地址

https://flurl.dev

c1f914d73acadfcb90793d3ae60c8a4d.png

分享

803f33deede65f2473a454550755ad63.png

点收藏

32535400edcb34bd87f34a82cc38e369.png

点点赞

aafb40fa70690f701e7a22f0795e4f79.png

点在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值