码农架构 | 如何设计出优雅且实用的 API 接口

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 互联网工程的高速发展,分布式、微服务、容器化架构的流行,互联网已全面进入云原生时代。构建系统的方式由最初的单体大应用演变为分布式架构,不以规矩,不能成方圆。只有我们不断地去优化才会创造出更好的产品

记得最开始的时候在设计接口的时候规范还没有那么多,因为前后端还没分离。不管是前端还是后端都是一个人开发,为了追求"效率"。所谓的接口规范百花齐放,各有各自的一套。后来前后端分离,哪些为了追求"效率"而写的代码,重构起来的代码也是头疼。

所以到了现在已经基本固定基本的机构体系,针对业务得不同还可以垂直拓展。

如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范!

在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性、接口的稳定性、接口的跨域性、接口的协议规则、接口的路径规则、接口单一原则、接口过滤和接口组合等诸多因素。

本文主要针对接口返回参数结合一些网上的案例比较和思考,来讲述接口返回参数需要怎么设计更加合理。

行业案例

简书

这可能是我看到过最差的设计,打开几个网页可以看到接口返回参数设计,简单粗暴,这里就不错过多的评论。

{
// 结果集}

掘金

看完简书再看下另外一个产品掘金,掘金相对而言会好点。至少有了明显的层次结构,包含状态码、结果集、成功或错误,但是这个命名确实让人有点误解,至少我个人看到后是这种感觉。

{
"data":"结果集",
"err_msg":"成功或错误提示",
"err_no":"状态码"}

CSDN

就论接口参数CSDN算是中规中矩的接口,接口包含了三大要素:状态码、结果集、成功或错误的的提示。

{
"code":"状态码/结果编码",
"data":"结果集/数据",
"message":"成功/错误提示"}

针对这种返回参数针对单体服务来讲算是合格的,知道每个接口的状态、对应状态的结果、针对状态如果要展示提示可以根据message对应的信息来确定。对于单体服务这种设计基本能满足要求。

InfoQ

看到InfoQ的接口返回值,让我觉得不错的一点就是有一个拓展的返回参数设计,里面有个参数cost(成本),通熟一点就是接口的耗时。

{
"code":"状态码/结果编码",
"data":"结果集/数据",
"error":"成功/错误提示",
"extra":{
"cost":"成本/耗时",
"request-id":"请求ID"  }
}

针对InfoQ的接口返回参数设计,相对上述几个产品而已确实优化了很多,尤其是针对接口做了成本/耗时统计。但是这种设计还是有点冗余,为什么这么讲呢?因为浏览器自带功能

对于request-id个人理解为当前请求线程的链路ID。在微服务体系中用于追踪服务的日志,算是一把利器。

设计优化

结合上面几个产品的接口返回参数设计,可以简单归纳接口返回参数的几个要点

在结合InfoQ和CSDN的基础上,加上了boolean类型的是接口执行是否成功的标识,当然也你也可以用状态码,但是这里做了一些的优化调整。

再思考一下一种常见国际化问题

  • 如何统一国家化提示?针对后端的一些校验异常抛出提示怎么处理国际化问题?

其实解决上诉问题国际化问题不是特别难,稍微做一下调整。

  • code 调整为:成功/错误的messageKey,由前后端统一约束国际化的key
  • msg  调整为:成功/错误的提示信息,由后端根据国际化配置转化成对应的错误信息

{
"success": true,
"code": "return.optSuccess",
"msg": "您的操作已成功!",
"data": {
// 数据    },
"extendProps":{
// 拓展   }
}


设计拓展

在基础返回信息中针对拓展的补充,其实这里的目的主要是对于开发和运维人员来补充的。

思考下如果一个接口返回了错误信息,你的第一反应是怎样的?

查看后端日志,但是日志采集信息那么多,基于什么信息去查后台服务器的日志才能快速定位问题?

为了解决日志查询难定位的场景,这里建议加上链路ID也可称为追踪ID,因此可以继续优化设计

{
"success": true,
"code": "return.optSuccess",
"msg": "您的操作已成功!",
"data": {
// 数据    },
"traceId":"1fbovmc1hwu2wc5w2n2n4gm2lmjaoo2b5dw0"}

当然并不是所有的错误都需要去查看日志,必要的时候针对一些错误,后端开发完全可以将堆栈信息缓存抛出来,例如这样

{
"success": false,
"code": "初始化发生异常!",
"traceId": "1fbqterqbwu5wiow1bjvu6214amgrd3i7cw0",
"errStacks": [
        {
"app": "base-service",
"code": "error.data.dictionary.conversion",
"message":"数据字典序列化异常"        }
    ]
}

针对接口看到堆栈信息大致可以定位到自己代码错误的位置,如果还定位不到就要通过链路ID查看后具体错误位置,因此针对接口返回参数可以继续优化

总结

互联网工程的高速发展,分布式、微服务、容器化架构的流行,互联网已全面进入云原生时代。构建系统的方式由最初的单体大应用演变为分布式架构,不以规矩,不能成方圆。只有我们不断地去优化才会创造出更好的产品。本期主要针对接口返回参数结合一些网上的案例比较和思考。

其实在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性、接口的稳定性、接口的跨域性、接口的协议规则、接口的路径规则、接口单一原则、接口过滤和接口组合等诸多因素。后期几期会逐一分享。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
1月前
|
设计模式 API 开发者
探索现代后端开发:微服务架构与API设计
【10月更文挑战第6天】探索现代后端开发:微服务架构与API设计
|
2天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
8天前
|
缓存 负载均衡 监控
微服务架构下的接口性能优化策略####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。然而,随着系统复杂性的增加,接口性能问题日益凸显,成为制约用户体验与系统稳定性的关键因素。本文旨在探讨微服务架构下接口性能优化的有效策略,通过具体案例分析,揭示从代码层面到系统架构层面的全方位优化路径,为开发者提供实战指南。 ####
|
10天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
11天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
30 3
|
11天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
29 2
|
14天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。
|
15天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
25天前
|
编解码 监控 API
直播源怎么调用api接口
调用直播源的API接口涉及开通服务、添加域名、获取API密钥、调用API接口、生成推流和拉流地址、配置直播源、开始直播、监控管理及停止直播等步骤。不同云服务平台的具体操作略有差异,但整体流程简单易懂。

热门文章

最新文章