news 2026/2/8 22:12:29

【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/2/7 15:54:43

3分钟论文降ai!亲测降ai率从80%降到10%,免费降低ai率全靠这招。

长文章版 凌晨三点&#xff0c;我对着检测报告整个人都傻了——AI率87%&#xff0c;全红&#xff1f;&#xff01; 从人工手改到各种所谓“免费降AI率工具”&#xff0c;我几乎全试过&#xff0c;不是没效果&#xff0c;就是把字数改到翻倍交不上去。最后还是靠自己总结的5个技…

作者头像 李华
网站建设 2026/2/3 11:38:44

【毕业设计】机器学习基于python深度学习的乐器识别

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

作者头像 李华
网站建设 2026/2/2 20:58:34

【课程设计/毕业设计】机器学习 基于python深度学习识别水面漂浮垃圾

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

作者头像 李华
网站建设 2026/2/8 6:12:43

深度学习毕设项目:基于卷神经网络识别水面漂浮垃圾

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

作者头像 李华