在 .NET Core WebAPI 中遵循 RESTful 风格时,方法命名需要与 HTTP 方法和 资源操作语义强关联。以下是命名规范及示例:
一、核心命名原则
语义清晰
方法名应直接反映操作的目标资源(如 Users、Products)和动作类型(如 Get、Create)。
HTTP 动词映射
使用 [HttpGet]、[HttpPost] 等属性显式声明 HTTP 方法,方法名需与 HTTP 动词语义一致。
避免冗余
控制器类名已包含资源名(如 UsersController),方法名无需重复资源(例如用 Get() 而非 GetUsers())。
二、具体命名规范
1. 获取资源(HTTP GET)
获取集合:GetAll 或 Get
csharp
Copy Code
[HttpGet]
public ActionResult<IEnumerable<User>> Get()
{
// 返回所有用户
}
获取单个资源:GetById 或 Get
csharp
Copy Code
[HttpGet("{id}")]
public ActionResult<User> Get(int id)
{
// 返回指定ID的用户
}
条件筛选/分页:GetBy[条件]
csharp
Copy Code
[HttpGet("filter")]
public ActionResult<IEnumerable<User>> GetByAge([FromQuery] int minAge)
{
// 按年龄筛选用户
}
[HttpGet("paged")]
public ActionResult<PagedList<User>> GetWithPaging([FromQuery] int page, int pageSize)
{
// 分页查询用户
}
2. 创建资源(HTTP POST)
标准命名:Create
csharp
Copy Code
[HttpPost]
public ActionResult<User> Create([FromBody] User user)
{
// 创建新用户
}
3. 更新资源(HTTP PUT/PATCH)
全量更新(PUT):Update
csharp
Copy Code
[HttpPut("{id}")]
public IActionResult Update(int id, [FromBody] User user)
{
// 替换整个用户数据
}
部分更新(PATCH):Patch
csharp
Copy Code
[HttpPatch("{id}/email")]
public IActionResult PatchEmail(int id, [FromBody] string newEmail)
{
// 仅更新用户邮箱
}
4. 删除资源(HTTP DELETE)
标准命名:Delete
csharp
Copy Code
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
// 删除指定ID的用户
}
批量删除:DeleteMultiple
csharp
Copy Code
[HttpDelete]
public IActionResult DeleteMultiple([FromBody] List<int> ids)
{
// 批量删除用户
}
三、特殊场景命名
1. 子资源操作
使用 / 分隔父资源和子资源,方法名体现层级关系:
csharp
Copy Code
[HttpGet("{userId}/orders")]
public ActionResult<IEnumerable<Order>> GetUserOrders(int userId)
{
// 获取用户的所有订单
}
2. 异步方法
推荐添加 Async 后缀(符合 .NET 异步规范):
csharp
Copy Code
[HttpGet]
public async Task<ActionResult<IEnumerable<User>>> GetAllAsync()
{
// 异步获取所有用户
}
四、最佳实践
语义一致性
同一资源的操作应保持命名风格统一(例如 Get/Create/Update/Delete)。
避免动词冗余
错误示例 ❌:
csharp
Copy Code
[HttpPost]
public IActionResult PostCreateUser([FromBody] User user) // 冗余的 "Post" 前缀
自定义路由覆盖
若需自定义路由,保持方法名与操作语义一致:
csharp
Copy Code
[HttpPost("validate")]
public IActionResult Validate([FromBody] User user)
{
// 验证用户数据
}
团队规范优先
遵循团队内部约定的命名规则(如统一用 Get 或 GetAll)。
通过以上规范,可确保 API 方法命名清晰、符合 RESTful 设计原则,并提升代码可读性和维护性。