自动类型安全的.NET标准REST库refit

SCOTT HANSELMAN
博客上看出一个好东西《Exploring refit, an automatic type-safe REST
library for .NET
Standard
》,他引进了一个.NET标准1.4
的自动类型安全的REST库refit
refit
类似于Java的Retrofit,是一套RESTful架构的.NET客户端达成,基于特性,提供把REST
API重临的数目转载为(Plain Ordinary C# Object,简单C#对象),POCO to
JSON,网络请求(POST,GET,PUT,DELETE等)封装,内部封装使用HttpClient,前者专注于接口的卷入,后者专注于互联网请求的飞快,二者分工合营。大家的应用程序通过
refit伸手网络,实际上是行使 refit接口层封装请求参数、Header、Url
等信息,之后由
HttpClient成就后续的请求操作,在服务端重返数据之后,HttpClient将原本的结果提交
refit,后者依据用户的需要对结果进行剖析的进度。

例如:

public interface IGitHubApi
{
    [Get("/users/{user}")]
    Task<User> GetUser(string user);
}

概念方面的一个REST API接口。 该接口定义了一个函数
GetUser,该函数会通过HTTP
GET请求去做客服务器的/users/{user}路线并把再次来到的结果封装为User POCO
对象回来。

里面URL路径中的{user}的值为GetUser函数中的参数 user的取值。

然后通过 RestService类来生成一个
IGitHubApi接口的贯彻,使用HttpClient 调用;

var gitHubApi = RestService.For<IGitHubApi>(https://api.github.com);
var octocat = await gitHubApi.GetUser("octocat");

从上边的示范可以见见, refit使用特性来声称HTTP请求

  • 支撑 URL 参数替换和询问参数
  • 回去结果转换为C#目的(再次回到结果可以为JSON)
  • 支撑 Multipart请求和文书上传

具体行使文档

函数和函数参数上的表征声明了请求形式

1、请求格局

每个函数都必须含有
HTTP特性来表明请求情势和伸手的URL路径。类库中有5个HTTP表明:GET,
POST,
PUT,DELETEHEAD。声明中的参数为呼吁的相对URL路径

[Get("/users/list")]

在URL路径中也足以指定URL参数:

[Get("/users/list?sort=desc")]
2、URL处理

呼吁的URL可以按照函数参数动态更新。一个可替换的区块为用 {}
包围的字符串,而函数参数必需用 @``AliasAs特性标志,并且特性的参数为
一致的字符串

[Get("/group/{id}/users")]//注意 字符串id
Task<List<User>> GroupList([AliasAs("id")] int groupId); //注意 AliasAs特性的参数要和前面的字符串一样 id

还支持查询参数

[Get("/group/{id}/users")]
Task<List<User>> GroupList([AliasAs("id")] int groupId, [AliasAs("sort")] string sortOrder);

GroupList(4, "desc");
>>> "/group/4/users?sort=desc"
3、请求体(Request Body)

通过[Body]特性可以声多美滋个对象作为请求体发送到服务器。

[Post("/users/new")]
Task CreateUser([Body] User user);

对象将被RestService 使用对应的转换器转换为字符串或者字节流提交到服务器。
4、FORM ENCODED AND MULTIPART 表单和Multipart

函数也得以注脚为发送表单数据和multipart 数据

5、服务器结果转换为C# 对象

使用RestService的转换器把HTTP请求结果(默许为JSON)转换为C#C++,对象,C#目的通过函数再次来到值指定

6、添加请求头

大家可以通过[Headers]来添加请求头,扶助动态的呼吁头。

refit是十分强劲的,本文通过添加的言传身教和对源码的发掘,向我们突显了
refit自身强硬的效益以及扩张性