这篇文章主要讲解了“API参数规范有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“API参数规范有哪些”吧!
【强制】字段名称用小驼峰风格
【强制】Service API返回值必须使用Response包装
【强制】杜绝完全不规范的缩写,避免望文不知义。(国际通用缩写除外)
【强制】禁止使用 Map 作为参数类型
Map<K,V>机制非常灵活,但这样的灵活却是负作用巨大。
Map的数据说明是晦涩的,调用方、实现方之间需要具有隐式的契约解释支持哪些Key,每个Key的Value是什么类型。增加了双方的使用复杂度。
Map<K,V>不可被校验。加之第1条的使用复杂度,导致使用上非常容易出错。
用Map类型字段做预留扩展性的设计都是不优雅的设计。
注:参数中的调用方自定义数据部分允许使用Map。API提供方不关系、不解析、只透传。
【强制】业务对象/查询条件用DTO封装,禁止以入参方式平铺字段。
分页查询,将查询条件以DTO方式包装。
Dubbo序列化特点:
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;
......
} |
感谢各位的阅读,以上就是“API参数规范有哪些”的内容了,经过本文的学习后,相信大家对API参数规范有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是天达云,小编将为大家推送更多相关知识点的文章,欢迎关注!