Restful api中关于同一个资源多种创建方式的API设计

来源:4-2 【理解】RESTful的6个约束与最佳实践

追风筝的人00

2021-11-24

老师你好,现在我有一个这样的问题
项目中有一个需求是创建一个资源,但是它有多种创建方式,在这个Controller中,Post方法的签名都一样,这样好像是不行的,在这种情况下Restful怎么设计呢

// 方式1
        [HttpPost]
        public async Task<IActionResult> AddEquipment(long producerId, long productId, [FromBody] EquipmentVm2 vm)
// 方式2
        [HttpPost]
        public async Task<IActionResult> AddEquipment(long producerId, long productId, [FromBody]EquipmentVm vm)

这种情况应该怎么设计呢

写回答

1回答

阿莱克斯刘

2021-11-27

不光是controller,任何一个类都不可以定义签名重复的方法。但是你的两个方法的签名是不一样的,第一个AddEquipment方法的第三个参数是EquipmentVm2;而第二个AddEquipment方法的第三个参数是EquipmentVm。所以这是两个不一样的方法。

你的问题出在[HttpPost]这个特性上,一个controller不能有两个路径一样、请求方法一样的api。

所以,你可以把第一个AddEquipment声明为[HttpPost],而第二个AddEquipment声明为[HttpPost("add2")]

那么你的api就会产生两条:

POST api/equipment
POST api/equipment/add2

当然,这种命名方式不符合REST。


0
0

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

977 学习 · 547 问题

查看课程