<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          動態(tài) Restful API 生成

          共 2709字,需瀏覽 6分鐘

           ·

          2020-09-23 16:02

          介紹

          通常在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

          回復(fù)?【關(guān)閉】學(xué)關(guān)
          回復(fù)?【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù)?【被刪】學(xué)
          回復(fù)?【訪客】學(xué)
          回復(fù)?【小程序】學(xué)獲取15套【入門+實(shí)戰(zhàn)+賺錢】小程序源碼
          回復(fù)?【python】學(xué)微獲取全套0基礎(chǔ)Python知識手冊
          回復(fù)?【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復(fù)?【加群】加入dotnet微信交流群

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


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


          瀏覽 56
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操操操网| 九九九九精品视频 | 精品久久7777777香港 | 青青草视频免费在线看 | 亚洲无码做爱 |