介紹
通常在DDD開發架構中,我們寫完服務層需要在控制器中寫API,今天介紹一個組件 Plus.AutoApi
可以用它來動態生成 Restful 風格的 WebApi,不用寫 Controller。
快速使用
在你的應用服務層中添加組件
Install-Package Plus.AutoApi
在 Startup 中注冊 AutoApi
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoApi(x => { });
}
AddAutoApi
同時也支持各種 Options 參數,可以自行查看。
讓你的服務直接或者間接實現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<WeatherForecast> Get()
{
return WeatherForecast();
}
[HttpGet("{id}")]
public IEnumerable<WeatherForecast> Get(int id)
{
return WeatherForecast();
}
public IEnumerable<WeatherForecast> Post()
{
return WeatherForecast();
}
[HttpPut("{id}")]
public IEnumerable<WeatherForecast> Put(int id)
{
return WeatherForecast();
}
[HttpDelete("{id}")]
public IEnumerable<WeatherForecast> Delete(int id)
{
return WeatherForecast();
}
private static IEnumerable<WeatherForecast> 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();
}
}
需要注意的是你的服務層命名規范,默認要以Service
或者ApplicationService
結尾,也可以通過配置替換默認名稱。
如果你想讓某個服務不自動生成API,可以給特性傳遞參數:[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方法,也可以根據默認規則自動創建。
默認自動創建HTTP方法的規則如下:
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