服务 API 设计之 ——API 参数规范

简介: 服务 API 设计之 ——API 参数规范

【强制】字段名称用小驼峰风格


【强制】Service API 返回值必须使用 Response 包装

  • Service API 返回值强制要求进行通用包装,例如:Response。
  • Response 的作用:
  1. 统一方法表示 API 调用是否成功
  2. API 调用失败时,统一格式反馈错误 Code,错误 Message
  3. 统一的 Response 易于调用方经验复用,框架集成
  • 作为 API 调用方,其编码诉求很简单:
  1. API 调用是否成功;
  2. 调用不成功时,提示文案是什么;
  • 调用方几不想:
  1. 不想关心 API 内部有多牛逼
  2. 不想关心 API 可能会抛的各种 Exception,以及因此不得不做各种异常处理
  • 关于当前不统一的 Response
  • 【新业务】【强制】使用架构组定义的统一 Response:ZCY Response
  • 目前业务方有自定义 Result/Response,风格和作用大同小异。有更好的设计可以自荐给架构组集成,杜绝各自开辟重复的新定义。


【强制】杜绝完全不规范的缩写,避免望文不知义。(国际通用缩写除外)

  • 错误实践
  • AbstractClass “缩写” 命名成 AbsClass;
  • condition “缩写” 命名成 condi;
  • 此类随意缩写严重降低了代码的可阅读性。


【强制】禁止使用 Map 作为参数类型

Map<K,V> 机制非常灵活,但这样的灵活却是负作用巨大。

  1. Map 的数据说明是晦涩的,调用方、实现方之间需要具有隐式的契约解释支持哪些 Key,每个 Key 的 Value 是什么类型。增加了双方的使用复杂度。
  2. Map<K,V> 不可被校验。加之第 1 条的使用复杂度,导致使用上非常容易出错。
  3. 用 Map 类型字段做预留扩展性的设计都是不优雅的设计。

注:参数中的调用方自定义数据部分允许使用 Map。API 提供方不关系、不解析、只透传。


【强制】业务对象 / 查询条件用 DTO 封装,禁止以入参方式平铺字段。

  • 正确实践

分页查询,将查询条件以 DTO 方式包装。

Dubbo 序列化特点:

  • Dubbo API 的 POJO 类中,UID 不一致:没关系。
  • Dubbo API 的 POJO 类中,字段数量不一致:没关系,只要字段名和类型一致,数据能反序列化成功。
  • 发送方比接收方的字段多:没关系。
  • 发送方比接收方的字段少:没关系。
1 Response<Page<T>> pagingXXX(QueryDTO q)
  • 错误实践
1 Response<Page<T>> pagingXXX(String name, String code, Long orgId, Long creatorId, Integer pageNo, Integer PageSize)

以上错误实践缺点:

1、对于调用方来说,无论以什么条件查询,都需要逐个条件传参。

2、API 对扩展不友好,一旦想增加查询条件,API 就不兼容。


【推荐】DTO 字段设置 JSR303 Annotation 进行基础校验

  • 正确实践
1
2
3
public interface ZcyPayFacade {
Result<Boolean> validTradePay(@NotNull @Valid TradePayPO tradePayPO);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class TradePayPO implements Serializable {

@NotBlank
@Length(max = 15)
/** 业务交易编号(订单编号) */
private String businessTradeNo;

/**
* 业务渠道:1-订阅,2-CA
* @see BusinessTypeEnum
*
* */
@NotNull
@Range(min = 1, max = 2)
private Integer businessType;

......

/** 商户名称(商家) */
@NotBlank
@Length(max = 50)
private String merchantName;

/** 订单标题(即商品名称),粗略描述用户的支付目的。如“喜士多(浦东店)消费”*/
@NotBlank
@Length(max = 256)
private String orderSubject;

/** 订单描述(即商品描述),可以对交易或商品进行一个详细地描述,比如填写"购买商品2件共15.00元"*/
@NotBlank
@Length(max = 128)
private String orderBody;

......
}


【推荐】在客户端完成基础字段校验

  • 方式 1:【推荐】自定义 Dubbo Filter 实现通用拦截、校验。
  • 方式 2:【推荐】通过 Builder 模式构建入参对象。
  • 方式 3:【不推荐】Dubbo 客户端参数校验,要求 consumer 方设置 validation=”true”,Dubbo 客户端参数校验。缺点:以抛异常方式处理校验失败,需要业务方额外处理 Exception。而且,IDE 并不会提示 consumer 方需要处理 ConstraintViolationException。
  • 方式 4:Dubbo 方式,local-stub 特性。实现较复杂,校验代码通用性低。Dubbo local-stub
相关文章
|
3月前
|
JSON 监控 API
京东商品数据获取新姿势:商品列表API参数全解析
京东商品列表API是京东开放平台的核心接口,支持开发者高效获取商品名称、价格、销量等信息,适用于电商分析、价格监控等场景。提供关键词搜索、分类筛选、价格区间、排序及分页功能,支持HTTPS请求,数据实时更新,单次可查询最多200个SKU,助力电商应用开发。
|
3月前
|
JSON 监控 供应链
京东商品详情API参数构造指南:必填参数与自定义字段配置
京东商品详情API由京东开放平台提供,支持获取商品基础信息、价格库存、SKU规格等120+字段,适用于价格监控、库存管理等场景。接口采用HTTPS协议、JSON格式,数据延迟≤30秒,支持高并发。提供Python请求示例,便于快速接入。
|
5月前
|
JSON 安全 Java
API 一键转换 MCP 服务!Higress 助今日投资快速上线 MCP 市场
今日投资的技术负责人介绍了如何通过Higress MCP 市场完善的解决方案,快捷地将丰富的金融数据 API 转化为 MCP 工具,帮助用户通过 MCP 的方式非常轻松地调用专业金融数据,自由快速地构建自己的金融大模型应用。
723 23
|
6月前
|
监控 安全 API
电商API行业标准与规范体系构建:推动电商行业规范化前行
电商API行业标准与规范是推动电商高效发展的核心。通过数据格式标准化、接口设计一致性及严格的安全措施,可提升数据交互效率、保障安全并促进系统兼容性。淘宝、京东、拼多多等平台的实践展示了其重要性。未来,智能化、隐私保护强化和跨平台集成将成为主要趋势,助力电商生态持续繁荣。
|
6月前
|
人工智能 自然语言处理 API
电商API技术文档编写规范白皮书:方法论与行业实践
本文系统阐述电商API接口文档的编写规范与最佳实践,涵盖结构设计、技术语言、开发者体验、版本控制及质量保障等方面,助力企业提升开发效率,构建开放共赢的电商生态。
|
8月前
|
自动驾驶 程序员 API
告别重复繁琐!Apipost参数描述库让API开发效率飙升!
在API开发中,重复录入参数占用了42%的时间,不仅效率低下还易出错。Apipost推出的参数描述库解决了这一痛点,通过智能记忆功能实现参数自动填充,如版本号、分页控制、用户信息等常用字段,大幅减少手动输入。支持Key-Value与Raw-Json格式导入,一键提取响应结果至文档,将创建20参数接口文档时间从18分钟缩短至2分钟。相比Postman需手动搜索变量,Apipost的参数复用响应速度仅0.3秒,且支持跨项目共享与实时纠错,真正实现“一次定义,终身受益”。
|
4月前
|
人工智能 算法 API
国产化用于单导联和六导联的心电算法及API服务
随着智能设备普及,心电图功能逐渐应用于智能手表、体脂仪等设备。苏州唯理推出单导联及6导联心电算法API服务,由AI驱动,1分钟内快速评估心律失常、房颤、早搏等问题,已广泛用于医疗设备及三甲医院。其算法还可评估压力、疲劳、情绪状态,筛查效率远超进口设备。唯理率先实现国产医疗级心电芯片,支持快速集成与私有化部署,适用于多种智能硬件。
|
5月前
|
供应链 数据挖掘 API
1688商品详情API全字段解析:从基础参数到SKU深度挖掘
1688商品详情API为开发者提供高效获取商品信息的官方通道,支持自动化获取标题、价格、库存等核心数据,适用于电商开发、数据分析及供应链管理。接口支持灵活参数配置,并提供Python调用示例,便于快速集成与应用。
|
5月前
|
监控 供应链 API
1688商品列表API全参数指南:从基础搜索到高级筛选
1688商品列表API是阿里巴巴B2B平台的核心接口,支持关键词搜索、高级筛选、排序与分页功能,适用于选品、价格监控等场景。数据规范、稳定高效,日均调用量大。提供Python示例代码,便于快速接入与扩展应用。
|
5月前
|
监控 安全 测试技术
从0到1构建电商API:如何用规范设计省下百万维护成本?
本文系统解析电商API接口开发全流程,涵盖需求分析、架构设计、安全实践、测试上线及文档维护等关键环节,结合技术规范与实际案例,助力构建高可用、可扩展的电商系统。