我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
--------------------------------------------------------------------------------------------------------------
PasteForm的升级版PasteApeart,享受极致简洁的框架的魅力,点击查看文档
--------------------------------------------------------------------------------------------------------------
如果说PasteForm1.0是All in Dto
那么PasteApeart就是All in Dto and Handler
所以,PasteApeart是PasteForm1.0的升级版!
既然有PasteForm1.0那么就有PasteForm2.0
其实PasteForm2.0和PasteApeart是保持功能一致的,区别在于PasteForm2.0基于ABP,而PasteApeart则没有基于其他框架纯原生!
如果你使用我提供的项目模板进行项目创建,比如命名为Project1.则会生成以下子项目
Project1.Domain
Project1.EntityFrameworkCore
Project1.Application.Contracts
Project1.Handler
Project1.Applciation
Project1.HttpApi.Host
| 模块 | 说明 |
|---|---|
| .Domain | 存放Entity和Enum等,表示数据库的表 |
| .Application.Contracts | Dto存放,EventModel存放,不附带逻辑的Model |
| .EntityframeworkCore | 数据库EF模块,像多租户,默认填充,审计日志存储等都在这 |
| .Handler | 业务逻辑存放处,IEventHandler实现,消息队列,等 |
| .Application | 主要是CRUD的接口存放 |
| .HttpApi.Host | 主要是非CRUD的接口,还可能涉及服务端渲染的UI等 |
严格来说,PasteForm有2个版本,第一个版本是PasteForm.Helper(PasteFormHelper)等,后面由于PasteApeart的引入,干脆再升级了一个PasteForm
最早之前是PasteFormHelper,后面改成了PasteForm.Helper
这个dll的主要作用就是帮助你吧Dto的信息转化成元数据(VoloModelInfo)的
那时候的PasteForm也就只有这个东西,
这个版本是在PasteApeart出来后,和PasteApeart相互对应的,区别主要在于PasteForm基于ABP,而PasteApeart是非基于ABP的!
PasteForm.2和PasteApeart的项目,在使用Dto转元数据都使用的是PasteApeart.Helper
注意后续PasteForm.Helper将不再维护,后续全部引用PasteApeart.Helper即可
这个的推出,主要是之前的我的项目基于ABP的,启动太慢了,所以把不需要的都丢弃后,按照ABP的规则自己写一个项目模板具体的你可以查看PasteApeart项目中的example案例
| 模块 | PasteForm.1 | PasteForm.2 | PasteApeart | 说明 |
|---|---|---|---|---|
| Helper | PasteFormHelper | PasteApeart.Helper | PasteApeart.Helper | 实现Dto转元数据给管理端 |
| Domain | PasteForm.Domain | PasteApeart.Domain | ||
| Dto | PasteForm.Application.Contracts | PasteApeart.Application.Contracts | ||
| EF | PasteApeart.Entityframework | 引入过滤,多租户等 | ||
| Handler | PasteForm.Handler | PasteApeart.Handler | Redis,RabbitMQ,IEventHandler等 | |
| Application | PasteForm.Application | PasteApeart.Application | 默认CRUD接口,IService转API |
PasteForm.xxx继承于ABP,也就是Volo.Abp.xxx
| 模块 | 说明 |
|---|---|
| Helper | 帮助项目把Dto转化成元数据 |
| EF | 主要引入比如审计日志,多租户,默认填充等 |
| Dto | 主要引入一些默认的Model,比如状态变更InputUpdateStateModel,查询默认InputQueryBase,异常PasteCodeException等 |
| Handler | 实现默认的redis,rabbitmq,channel,IEventHandler |
| Application | 主要引入DefaultAppService,也就是你的表不需要写默认接口,是这个框架的核心!!! |
为所有的Entity提供的一个对外的接口,这是一个很重要的CRUD实现方式!默认管理端的页面就是通过以下接口通讯的!
| Method | Api | 说明 | 入参 |
|---|---|---|---|
| GET | /api/app/{entityName}/readAddModel | 获取新增元数据 | |
| GET | /api/app/{entityName}/{id}/readUpdateModel | 获取更新元数据 | |
| GET | /api/app/{entityName}/{id}/readDetailModel | 获取详细元数据 | |
| GET | /api/app/{entityName}/readListModel | 获取列表元数据 | |
| GET | /api/app/{entityName}/page | 获取列表 | InputQueryEntityName |
| POST | /api/app/{entityName}/item | 创建 | EntityNameAddDto |
| POST | /api/app/{entityName}/updateItem | 更新 | EntityNameUpdateDto |
| POST | /api/app/{entityName}/updateState | 状态更新 | InputQueryUpdateState |
| POST | /api/app/{entityName}/{id}/remove | 删除 |
假设你得UserInfo的获取列表很复杂,你要自己写
那么你就应该在.Application的项目下,对应模块文件夹下的UserInfoAppService.cs
中写入以下函数
public async Task<PagedResultDto<UserInfoListDto>> Page([FromQuery] InputQueryUserInfo input)
{
//你自己实现业务查询逻辑
}
这样路由/api/app/userInfo/page就会覆盖DefaultAppService默认提供的/api/app/{entityName}/page,因为DefaultAppService的Order(排序)更大,小的覆盖大的!
二郎神
不用选,后面都是PasteApeart,他们其实是一个东西
看版本,PasteApeart.Helper 26.9.2之后,就按照基类前面的顺序了,也符合阅读顺序,当然你可以使用PasteSort再次改变他!
1.语言吧,这本身只是一个开发思想,其实其他语言也可以用,不过最优雅实现的还是.NET
2.特别适用于需要表单,表格的系统,所以哪些EMS,CRM,ERP等都合适
3.扩展,比如这个思想,你也可以应用于C/S,理论上也是可以的
4.这个主要针对的是管理端,附带UI的CRUD,也就是说对于业务代码,是没影响的!
5.可能入门会麻烦点,毕竟有接近100个PasteXXXX特性要了解,幸运的是都是Paste开头,官方的也支持,比如MaxLength,Required等!