news 2026/4/3 5:02:56

【REST API】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【REST API】

在 .NET Core WebAPI 开发中,REST API是一种架构风格,用于构建基于 HTTP 协议的 Web 服务。它遵循 REST(Representational State Transfer)设计原则。

核心概念

1.RESTful 原则

  • 统一接口:使用标准 HTTP 方法(GET、POST、PUT、DELETE 等)
  • 无状态:每个请求都包含处理所需的所有信息
  • 资源导向:一切都是资源,通过 URI 标识
  • 可缓存:响应应定义是否可缓存
  • 分层系统:客户端不关心与最终服务器的中间层

2.在 .NET Core WebAPI 中的实现

// 典型的 REST API Controller[ApiController][Route("api/[controller]")]// 资源路径:api/productspublicclassProductsController:ControllerBase{privatereadonlyIProductService_productService;publicProductsController(IProductServiceproductService){_productService=productService;}// GET api/products - 获取所有产品[HttpGet]publicasyncTask<ActionResult<IEnumerable<ProductDto>>>GetProducts(){varproducts=await_productService.GetAllAsync();returnOk(products);// HTTP 200 OK}// GET api/products/{id} - 获取单个产品[HttpGet("{id}")]publicasyncTask<ActionResult<ProductDto>>GetProduct(intid){varproduct=await_productService.GetByIdAsync(id);if(product==null)returnNotFound();// HTTP 404 Not FoundreturnOk(product);// HTTP 200 OK}// POST api/products - 创建新产品[HttpPost]publicasyncTask<ActionResult<ProductDto>>CreateProduct(CreateProductDtodto){varcreatedProduct=await_productService.CreateAsync(dto);// RESTful 标准:返回 201 Created 和资源位置returnCreatedAtAction(nameof(GetProduct),new{id=createdProduct.Id},createdProduct);// HTTP 201 Created}// PUT api/products/{id} - 更新整个产品[HttpPut("{id}")]publicasyncTask<IActionResult>UpdateProduct(intid,UpdateProductDtodto){varresult=await_productService.UpdateAsync(id,dto);if(!result)returnNotFound();returnNoContent();// HTTP 204 No Content}// PATCH api/products/{id} - 部分更新产品[HttpPatch("{id}")]publicasyncTask<IActionResult>PartialUpdateProduct(intid,JsonPatchDocument<UpdateProductDto>patchDoc){// 部分更新逻辑returnNoContent();}// DELETE api/products/{id} - 删除产品[HttpDelete("{id}")]publicasyncTask<IActionResult>DeleteProduct(intid){varresult=await_productService.DeleteAsync(id);if(!result)returnNotFound();returnNoContent();// HTTP 204 No Content}}

3.HTTP 方法与操作对应关系

HTTP 方法CRUD 操作描述幂等性安全性
GETRead获取资源
POSTCreate创建新资源
PUTUpdate更新整个资源
PATCHUpdate部分更新资源
DELETEDelete删除资源

4.状态码使用

// 常用 HTTP 状态码returnOk(data);// 200 - 成功returnCreated(uri,data);// 201 - 创建成功returnNoContent();// 204 - 成功无内容returnBadRequest(error);// 400 - 客户端错误returnUnauthorized();// 401 - 未认证returnForbid();// 403 - 无权限returnNotFound();// 404 - 资源不存在returnConflict(error);// 409 - 冲突returnStatusCode(500,error);// 500 - 服务器错误

5.RESTful 最佳实践

// 1. 使用复数名词命名资源// 正确:/api/products、/api/users// 避免:/api/getProduct、/api/createUser// 2. 使用嵌套资源表示关系[HttpGet("api/users/{userId}/orders")]// 获取用户的订单publicIActionResultGetUserOrders(intuserId){}// 3. 使用查询参数进行过滤、分页、排序[HttpGet("api/products")]publicIActionResultGetProducts([FromQuery]stringcategory,// 过滤[FromQuery]intpage=1,// 分页[FromQuery]intpageSize=10,// 分页大小[FromQuery]stringsortBy="name"){}// 4. 使用 HATEOAS 提供超媒体链接publicclassProductDto{publicintId{get;set;}publicstringName{get;set;}publicdecimalPrice{get;set;}publicList<LinkDto>Links{get;set;}=new();}// 在控制器中添加链接productDto.Links.Add(newLinkDto(href:Url.Link("GetProduct",new{id=productDto.Id}),rel:"self",method:"GET"));

6..NET Core 中的配置

// Startup.cs 或 Program.cs 中的配置builder.Services.AddControllers().AddJsonOptions(options=>{options.JsonSerializerOptions.PropertyNamingPolicy=JsonNamingPolicy.CamelCase;}).ConfigureApiBehaviorOptions(options=>{// 自动验证模型options.SuppressModelStateInvalidFilter=false;});// 添加 Swagger/OpenAPI 文档(推荐)builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();

7.版本控制

// 使用 URL 版本控制[ApiVersion("1.0")][Route("api/v{version:apiVersion}/[controller]")]publicclassProductsController:ControllerBase{}// 或使用 Header 版本控制[ApiVersion("2.0")][Route("api/[controller]")]publicclassProductsV2Controller:ControllerBase{}

总结

在 .NET Core WebAPI 中,REST API 是:

  1. 基于 HTTP 标准的 Web 服务架构
  2. 资源导向的设计方式
  3. 无状态的通信协议
  4. 使用标准 HTTP 方法对应 CRUD 操作
  5. 返回标准 HTTP 状态码
  6. 支持内容协商(JSON/XML)
  7. 易于缓存扩展

这样的设计使得 API 具有:

  • 可发现性:清晰的 URL 结构
  • 可读性:直观的 HTTP 方法和状态码
  • 松耦合:客户端和服务器独立演化
  • 可扩展性:易于添加新功能
  • 标准化:符合行业最佳实践

REST API 是现代微服务架构和前后端分离应用的基础通信方式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 7:39:13

深度学习计算机毕设之人工智能基于python深度学习的乐器识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/31 6:41:16

深度学习计算机毕设之基于python深度学习识别水面漂浮垃圾人工智能

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/21 1:49:00

零基础学Python UV处理:从安装到第一个脚本

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个面向初学者的Python UV处理教学程序&#xff0c;包含&#xff1a;1) 基础环境配置指南(BlenderPython)&#xff1b;2) 简单UV查询脚本示例&#xff1b;3) 基础UV移动/旋转…

作者头像 李华
网站建设 2026/3/27 17:41:24

深度解密:Windows SmartScreen过滤机制工作原理

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 编写一个Windows文件检测模拟器&#xff0c;实现&#xff1a;1. 文件信誉查询&#xff08;模拟微软后端服务&#xff09;2. 证书链验证模块 3. 启发式检测算法 4. 行为特征库匹配 …

作者头像 李华
网站建设 2026/3/22 18:29:55

AI一键搞定Node.js环境配置,告别繁琐安装步骤

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个智能Node.js安装助手&#xff0c;要求&#xff1a;1. 自动检测用户操作系统类型和版本 2. 根据系统推荐合适的Node.js版本&#xff08;LTS/Current&#xff09;3. 生成对应…

作者头像 李华