介绍

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

开源地址

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

动态 Restful API 生成相关推荐

  1. Restful API 生成复杂Json数据结构及使用客户端解析该数据结构(三)

    前提说明:首先约定接口之前,需要约定接口的参数,接口参数包括输入参数和输出参数 输入参数:指接口调用时输入的参数 输出参数:即接口调用时返回的参数. 那么如果说,约定输入输出参数均需要采用Json结构 ...

  2. php slim 教程,Slim - 超轻量级PHP Restful API构建框架

    下载源码包: http://www.slimframework.com/ 基于Slim的Restful API Sample: require '/darjuan/Slim/Slim.php'; us ...

  3. springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...

    一.引言 目前,利用swagger框架为restful接口编写API文档非常流行,在spring web项目中,利用springfox+swagger更是可以通过注解的方式直接进行API文档的生成,这 ...

  4. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

  5. Swagger 生成 PHP restful API 接口文档

    需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史. 我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪 ...

  6. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  7. 整合swagger2生成Restful Api接口文档

    整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...

  8. Api2Doc,生成 Restful API 文档

    Api2Doc 简介 Api2Doc 专注于 Restful API 文档的自动生成,它的原理与 Swagger2 是类似的, 都是通过反射,分析 Controller 中的信息生成文档,但它要比 S ...

  9. swagger php 生成api,blog/Swagger生成php restful API接口文档.md at master · lfq618/blog · GitHub...

    Swagger生成php restful API接口文档 背景 我们的restful api项目采用yaf框架, 整体结构简单, 我们只需要用swagger扫描 application目录即可. 下面 ...

最新文章

  1. mysql crm动态列设计_值得收藏:一份非常完整、详细的MySQL规范
  2. 【深度学习入门到精通系列】Gamma变换(校正)
  3. 反向传播神经网络 BPNN
  4. 使用netty搭建一个简单的聊天室
  5. mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解
  6. gt爵士变形步骤_代码广播简介:您可以编码为24/7的爵士节拍
  7. 联想ThinkCentre M8400t-n000等高配电脑重装成xp蓝屏0xc000007b代码
  8. HDOJ2024C语言合法标识符
  9. nginx启动重启与升级以及检测配置文件
  10. mysql报1665_mysql错误处理之ERROR 1665 (HY000)_MySQL
  11. 【渝粤教育】电大中专学前教育学_1作业 题库
  12. 磁盘列阵技术介绍及其部署
  13. 撸一个聊天室(vue+koa2+websokect+mongodb)
  14. 微信网页jssdk使用
  15. lumia535 刷Android,附教程:看看你的Lumia手机能不能刷安卓!
  16. ubuntu16.04下安装TensorFlow(GPU加速)----详细图文教程【转】
  17. 2022年罗振宇“时间的朋友”跨年演讲金句汇总
  18. wikioi 1550 不明飞行物
  19. 分享Jupyter notebook
  20. kubernetes-1.20.x二进制部署

热门文章

  1. webstrom使用方法
  2. lz98n外接电源注意问题
  3. 学习笔记之卸载远程目标进程中的DLL模块(转)
  4. uml 类图聚合与组合
  5. jq select操作全集
  6. javascript:设置URL参数的方法,适合多条件查询
  7. 学习kaneboy的 sps区域列表的管理入口程序
  8. 在Teams app代码中enable nullable
  9. Teams App设备的地理位置能力
  10. pixel 解锁_如何在Google Pixel 4和Pixel 4 XL上禁用面部解锁