使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
https://devblogs.microsoft.com/aspnet/creating-discoverable-http-apis-with-asp-net-core-5-web-api/
这个月,我们将关注使用 .NET 5 创建 HTTP API。我们将探索各种不同的工具、技术和服务来使你的 API 开发体验更为愉快。每一周,我们将在本博客发布一篇关于使用 .NET 构建 HTTP API 不同领域的文章,主要关注于使用 ASP.NET Core 5 Web API 和 OpenAPI 标准两者来构建、发布、消费和重用良好说明的 Web。下面是寄到到来的一个系列。
- Creating Discoverable HTTP APIs with ASP.NET Core 5 Web API (this post)
- Open-source HTTP API packages and Tools
- Generating HTTP API clients using Visual Studio Connected Services
- App Building with Azure API Management, Power Apps, and Logic Apps
考虑设计优先
如果你曾经在 Visual Studio 中右键 Add Web Reference 来添加一个 SOAP Web 服务,或者,当 WCF 出现的时候,使用 Add Service Reference 来添加它,您就会知道这些工具及其对标准描述格式的支持(Web 服务定义语言 (WSDL) 为您的开发体验带来的快乐。
OpanAPI 规范
定义良好的 API 对于开发、维护和使用它是友好的。在开发过程中,使用这些包来描述你的 API, 通过遵循一些简单的约定,你的 API 将更加可发现、与其它产品和云服务集成的集成会更加容易,通常来说,提供更多的使用场景。
示例项目
本文使用一个简单的 Visual Studio 解决方案。在该解决方案中,你将发现一个简单的用于 Contoso 在线订单的 Web API 工程。随着进行,
https://github.com/bradygaster/Contoso.Online.Orders?WT.mc_id=dotnet-13135-bradyg
ProducesAttribute
设定 API 输出的类型
对应的,ConsumesAttribute 用来指定请求 API 的内容类型。
[Produces("application/json")]
[Consumes("application/json")]
还可以使用 MediaTypeName 来更加简单的使用众所周知的媒体类型值。
可以在 Controller 级别为所有的请求和响应设置为 JSON 类型。
[Route("[controller]")]
[ApiController]
#if ProducesConsumes
[Produces(MediaTypeNames.Application.Json)]
[Consumes(MediaTypeNames.Application.Json)]
#endif
public class AdminController : ControllerBase
{
// controller code
}
HTTP Response Codes
如果成功,返回 200 OK,和实际的产品。
否则,会返回 404
[HttpGet("/products/{id}")]
public async Task<ActionResult<Product>> GetProduct(int id)
{
var product = StoreServices.GetProduct(id);
if(product == null)
{
return NotFound();
}
else
{
return Ok(product);
}
}
但是,OpenAPI 的 JSON 对于该方法仅仅提供了 200 响应码,默认的 GET 行为。
Web API 约定
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
#if ApiConventions
[assembly: ApiConventionType(typeof(DefaultApiConventions))]
#endif
namespace ContosoOnlineOrders.Api
{
public class Program
{
支持 OpenAPI operationId
用来区分每个操作的标识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-03-06 翻译:使用 Redux 和 ngrx 创建更佳的 Angular 2