动态 Restful API 生成
介紹
通常在DDD開發(fā)架構(gòu)中,我們寫完服務(wù)層需要在控制器中寫API,今天介紹一個組件 Plus.AutoApi 可以用它來動態(tài)生成 Restful 風格的 WebApi,不用寫 Controller。
快速使用
在你的應(yīng)用服務(wù)層中添加組件
Install-Package Plus.AutoApi在 Startup 中注冊 AutoApi
public?void?ConfigureServices(IServiceCollection?services) {services.AddAutoApi(x?=>?{?}); }AddAutoApi 同時也支持各種 Options 參數(shù),可以自行查看。
讓你的服務(wù)直接或者間接實現(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<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();} }需要注意的是你的服務(wù)層命名規(guī)范,默認要以Service或者ApplicationService結(jié)尾,也可以通過配置替換默認名稱。
如果你想讓某個服務(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ù)默認規(guī)則自動創(chuàng)建。
默認自動創(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
總結(jié)
以上是生活随笔為你收集整理的动态 Restful API 生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于弄明白了 Singleton,Tra
- 下一篇: C# 枚举转列表