提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:龚雪|2023-02-02 10:12:25.240|阅读 50 次
概述:本文将为大家介绍7个技巧构建更好更优秀的Web API,欢迎下载相关组件体验~
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
创建一个好的API需要特别注意一些事情,本文介绍的7个技巧将帮助开发人员在使用ASP.NET Core时轻松创建更好的API。
好的API由许多因素组成,包括日志、文档、性能等。随着Web API的流行,实现好的API是作为Web开发人员的日常工作中非常常见的任务,特别是使用Microsoft的技术,如ASP.NET Core。
Telerik_KendoUI产品技术交流群:726377843 欢迎一起进群讨论
总是使用名词
在创建端点时,总是使用名词替代动词,请看下面错误的方法和正确的方法。
命名约定
虽然在命名方面存在差异,但很常见的是,技术巨头的url总是使用小写字母。如果有必要使用一个由多个名词组成的单词,请尝试使用下划线(_)或破折号(-)将它们分开。示例如下:
名词是复数还是单数?
如前所述,应该使用名词替代动词,但常见的问题是这些名词是用复数还是单数来写。
答案是没有正确的形式,部分开发者更喜欢用复数形式,因为这样它们表示一组可以是一个或多个的特征。当使用单数时,将端点限制为一项。
无论您使用哪种方式,目标始终是简化。
版本
API在第一次发布后不断发展是很常见的,因此为同一个API创建不同版本非常重要。许多公司选择在端点中明确表示,即通过字母“v”+版本号表示API版本。所以,通常在第一个版本中我们看到“v1”
对API进行版本控制有助于系统维护,使用v1端点的系统不会受到影响,因为所有更改都在另一个端点上可用——在本例中为v2。
但重要的是要明确这不是强制性的,许多公司通常不为他们的API创建版本,在这种情况下,将创建新的API并替换就得API。
首先,开发人员应该学习HTTP的基础知识。
以下是主要的HTTP动词及其各自的功能:
使用正确的HTTP状态码
HTTP中一个有价值的特性是状态,这些状态在服务器响应中返回,这取决于请求中发送的操作结果,可能是命中,也可能是失败。不管结果如何,有几种类型的状态——由开发人员根据情况实现正确的状态。
例如,API通过查询字符串接收对方的id。如果数据库中存在该id, API将返回相应对方的数据。如果不是,API返回一个带有详细描述的错误。以下是两种场景:
1. 发现对方
HTTP/1.1 200 OK Content-Type: text/html { "status": "success", "data": { { "idSeller": "100002132", "name": "SellerExample", "offerCode": "4", "smallSeller": false } } }
2. 未发现对方
HTTP/1.1 404 Not Found Content-Type: text/html { "status": "error", "messages": [ { "code": "018", "message": "Seller not found" } ] }
另一个要点是返回状态的一致使用。例如,在success这个例子中,每个动词都有一个常用的模式。
API的端点用于数据的输入和输出,因此最好的选择是创建一个类(通常称为Service),将业务规则放在其中,然后在端点上调用服务类的主方法。如下面的例子所示:
❌ Wrong:
app.MapPost("v1/products", (Product product, ProductDbContext dbContext) => { string errorMessage = string.Empty; if (string.IsNullOrEmpty(product.Name)) errorMessage += "Name is mandatory"; if (string.IsNullOrEmpty(product.Category)) errorMessage += "Category is mandatory"; if (!string.IsNullOrEmpty(product.Name)) Results.BadRequest("Error creating the product"); else { dbContext.Products.Add(product); dbContext.SaveChanges(); return Results.Ok(); } }).WithName("CreateProduct");
✅ Correct:
app.MapPost("v1/products", (ProductService service, Product product) => { var resultMessage = service.Create(product); if (!string.IsNullOrEmpty(resultMessage)) Results.BadRequest($"Error creating the product, error validation: {resultMessage}"); return Results.Ok(); }).WithName("CreateProduct");
应用程序随着时间的推移而增长是很常见的,允许API使用者根据需要选择只获得一定数量的项是很重要的,对此的一个建议是分页。
要实现分页而不要求数据库提供太多性能,最好的方法是提供可以“切割”记录集合的参数(标识符)和数量限制器。
你可以在下面看到一个好的和坏的例子,在第一个示例中,没有分页选项或限制。在第二种情况下,可以在端点路由中注意到这些参数。
让所有消费者都可以使用Health路由是一种很好的实践,顾名思义,该路径用于检查API的运行状况。在这种情况下,不仅API可用,而且可以检查API依赖关系并返回在每个API中获得的结果。
例如,在需要在外部API中生成令牌的API中,开发人员可以检入运行状况端点(如果该外部API可用)并在运行状况路由中返回检查结果。
因此,在API返回错误500(内部服务器错误)的情况下,消费者可以快速知道问题的原因可能在哪里,下面是运行状况端点的示例。
GET - v1/products/health
app.MapGet("v1/products/health", (ProductService service) => { var externalAPIResponse = service.ExternalAPIHealthVerify(); return Results.Ok($"External API response: {externalAPIResponse.StatusCode} - {externalAPIResponse.Message}"); }).WithName("Health");
缓存是一种用于存储频繁使用的数据的技术,它非常有用,因为它旨在通过将数据存储在易于访问的地方来获得性能并减少web/数据库服务的负载,这些地方可以是内存内缓存(服务器的内存)、持久进程内缓存(文件或数据库)或分布式缓存(多进程)。
下面可以看到一个在ASP. NET Core Web API中实现内存缓存的例子。
app.MapGet ("v1/products", (ProductService service) => { const string ProductsKey = "_Products"; if (!cache.TryGetValue(ProductsKey, out List<Product> products)) { products = service.GetAll(); var cacheEntryOptions = new MemoryCacheEntryOptions { AbsoluteExpiration = DateTime.Now.AddMinutes(3), SlidingExpiration = TimeSpan.FromMinutes(2), Size = 1024, }; cache.Set(ProductsKey, products, cacheEntryOptions); } return Results.Ok(products); }).WithName("GetProducts");
在开发API时,编写好的文档是必不可少的——毕竟,开发人员将通过文档实现API的使用者。
大公司使用彼此非常相似的模型来提供关于其API的文档,它通常是一个非常简单的网页,包含了从头开始创建的所需的所有信息。
以下是良好文档的一些要求。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
最完整的.NET、Web和Mobile开发工具,智能制造首选控件。
Telerik UI for ASP.NET Core用于跨平台响应式Web和云开发的最完整的UI工具集。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢