动态 Restful API 生成

1|0介绍

通常在DDD开发架构中,我们写完服务层需要在控制器中写API,今天介绍一个组件 Plus.AutoApi 可以用它来动态生成 Restful 风格的 WebApi,不用写 Controller。

2|0快速使用

在你的应用服务层中添加组件

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路由如下:

3|0Samples

https://github.com/Meowv/Plus.AutoApi/tree/master/samples/Plus.AutoApi.Sample

4|0Nuget

https://www.nuget.org/packages/Plus.AutoApi

5|0开源地址

https://github.com/Meowv/Plus.AutoApi


__EOF__

本文作者阿星Plus
本文链接https://www.cnblogs.com/meowv/p/13599916.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   阿星Plus  阅读(898)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示