.net core webapi restful 风格 方法命名


在 .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 设计原则,并提升代码可读性和维护性。

  

posted on 2025-04-07 21:41  是水饺不是水饺  阅读(17)  评论(0)    收藏  举报

导航