博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态 Restful API 生成
阅读量:4035 次
发布时间:2019-05-24

本文共 2438 字,大约阅读时间需要 8 分钟。

介绍

通常在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
 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();    }}

需要注意的是你的服务层命名规范,默认要以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
()    {        ["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

转载地址:http://przdi.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux phy驱动初始化
查看>>
慢慢欣赏linux phy设备配置
查看>>
grub学习(1) 第一阶段启动
查看>>
c语言位域分配原则
查看>>
linux内核学习(1)第一阶段启动 解压缩内核
查看>>
grub学习(2) 加载内核
查看>>
grub学习(3) 加载initrd
查看>>
grub学习(4) 启动linux内核
查看>>
编译链接学习笔记1
查看>>
编译链接学习笔记2
查看>>
x86_64汇编语言
查看>>
慢慢欣赏linux kbuild的一些技巧
查看>>
慢慢欣赏linux kbuild如何编译c和汇编
查看>>
C对象化
查看>>
慢慢欣赏linux 生成内核镜像
查看>>
慢慢欣赏linux 内核反汇编分析
查看>>
慢慢欣赏linux 内核的重定位
查看>>
慢慢欣赏linux elf文件
查看>>
linux内核学习(3)建立页式内存映射
查看>>
linux内核学习(2)建立段式内存映射
查看>>