AgentSkillsCN

api-patterns

REST API 设计模式与最佳实践

SKILL.md
--- frontmatter
name: api-patterns
description: REST API design patterns and best practices

API Patterns

RESTful API design for ASP.NET Core.


REST Conventions

MethodActionRouteResponse
GETList/api/users200 + array
GETRead/api/users/{id}200 or 404
POSTCreate/api/users201 + object
PUTUpdate/api/users/{id}200 or 404
DELETEDelete/api/users/{id}204 or 404

Response Format

csharp
public class ApiResponse<T>
{
    public bool Success { get; set; }
    public T? Data { get; set; }
    public string? Error { get; set; }
    public List<string>? Errors { get; set; }
}

Pagination

csharp
[HttpGet]
public async Task<ActionResult<PagedResult<UserDto>>> GetUsers(
    [FromQuery] int page = 1,
    [FromQuery] int pageSize = 20)
{
    var result = await _service.GetPagedAsync(page, pageSize);
    return Ok(result);
}

public class PagedResult<T>
{
    public List<T> Items { get; set; }
    public int TotalCount { get; set; }
    public int Page { get; set; }
    public int PageSize { get; set; }
}

Validation

csharp
public class CreateUserDto
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    
    [Required]
    [StringLength(100, MinimumLength = 2)]
    public string Name { get; set; }
}

Error Handling

csharp
// Global exception handler
app.UseExceptionHandler(app =>
{
    app.Run(async context =>
    {
        context.Response.StatusCode = 500;
        await context.Response.WriteAsJsonAsync(new ApiResponse<object>
        {
            Success = false,
            Error = "An error occurred"
        });
    });
});

Versioning

csharp
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase

DO / DON'T

✅ Do❌ Don't
Consistent responsesMixed formats
Proper status codes200 for everything
Validate inputTrust user data
Version APIsBreaking changes