動態(tài) Restful API 生成
介紹
通常在DDD開發(fā)架構(gòu)中,我們寫完服務(wù)層需要在控制器中寫API,今天介紹一個組件 Plus.AutoApi 可以用它來動態(tài)生成 Restful 風(fēng)格的 WebApi,不用寫 Controller。
快速使用
在你的應(yīng)用服務(wù)層中添加組件
Install-Package Plus.AutoApi
在 Startup 中注冊 AutoApi
public?void?ConfigureServices(IServiceCollection?services)
{
????services.AddAutoApi(x?=>?{?});
}
AddAutoApi 同時也支持各種 Options 參數(shù),可以自行查看。
讓你的服務(wù)直接或者間接實(shí)現(xiàn)IAutoApi,添加特性[AutoApi]即可,示例代碼如下:
[AutoApi]
public?class?WeatherService?:?IAutoApi
{
????private?static?readonly?string[]?Summaries?=?new[]
????{
????????"Freezing",?"Bracing",?"Chilly",?"Cool",?"Mild",?"Warm",?"Balmy",?"Hot",?"Sweltering",?"Scorching"
????};
????public?IEnumerable?Get()
????{
????????return?WeatherForecast();
????}
????[HttpGet("{id}")]
????public?IEnumerable?Get(int?id)
????{
????????return?WeatherForecast();
????}
????public?IEnumerable?Post()
????{
????????return?WeatherForecast();
????}
????[HttpPut("{id}")]
????public?IEnumerable?Put(int?id)
????{
????????return?WeatherForecast();
????}
????[HttpDelete("{id}")]
????public?IEnumerable?Delete(int?id)
????{
????????return?WeatherForecast();
????}
????private?static?IEnumerable?WeatherForecast()
????{
????????var?rng?=?new?Random();
????????return?Enumerable.Range(1,?5).Select(index?=>?new?WeatherForecast
????????{
????????????Date?=?DateTime.Now.AddDays(index),
????????????TemperatureC?=?rng.Next(-20,?55),
????????????Summary?=?Summaries[rng.Next(Summaries.Length)]
????????}).ToArray();
????}
}
需要注意的是你的服務(wù)層命名規(guī)范,默認(rèn)要以Service或者ApplicationService結(jié)尾,也可以通過配置替換默認(rèn)名稱。
如果你想讓某個服務(wù)不自動生成API,可以給特性傳遞參數(shù):[AutoApi(Disabled = true)]
讓生成的API兼容 Swagger,需要添加下面這句代碼。
services.AddSwaggerGen(options?=>
{
????options.SwaggerDoc("v1",?new?OpenApiInfo
????{
????????Title?=?"Plus?AutoApi?Sample",
????????Version?=?"v1.0.0"
????});
????options.DocInclusionPredicate((docName,?description)?=>?true);
});
同時自動生成API也可以和控制器共存,互不影響。你可以手動指定HTTP方法,也可以根據(jù)默認(rèn)規(guī)則自動創(chuàng)建。
默認(rèn)自動創(chuàng)建HTTP方法的規(guī)則如下:
static?PlusConsts()
{
????HttpVerbs?=?new?Dictionary<string,?string>()
????{
????????["add"]?=?"POST",
????????["create"]?=?"POST",
????????["post"]?=?"POST",
????????["insert"]?=?"POST",
????????["get"]?=?"GET",
????????["find"]?=?"GET",
????????["fetch"]?=?"GET",
????????["query"]?=?"GET",
????????["update"]?=?"PUT",
????????["put"]?=?"PUT",
????????["delete"]?=?"DELETE",
????????["remove"]?=?"DELETE"
????};
}
上面代碼最終生成的API路由如下:

Samples
https://github.com/Meowv/Plus.AutoApi/tree/master/samples/Plus.AutoApi.Sample
Nuget
https://www.nuget.org/packages/Plus.AutoApi
開源地址
https://github.com/Meowv/Plus.AutoApi


一款開源的.NET Core爬蟲神器:DotnetSpider

臥槽,又來一個神奇的網(wǎng)站!
