服务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

注:此规范与《阿里巴巴Java编码规范》互补,同时有效。

转载于:https://my.oschina.net/u/3667677/blog/3096622

### 回答1: Windows API开发是指利用Windows操作系统提供的一系列函数、接口来进行软件开发的过程。在Windows API开发中,函数是指一组具有特定功能的代码块,通过调用这些函数可以实现相应的操作。接口是一组规定了函数调用方式和参数要求的规范,开发者根据接口规范来编写代码实现具体功能。编程实例则是实际应用Windows API进行开发的案例,可以帮助开发者更好地理解和掌握Windows API的使用。 在Windows API开发中,函数的使用非常重要。常见的函数包括用于窗口创建、消息处理、线程管理、文件操作等等。通过调用这些函数,我们可以实现窗口的创建和管理、消息的处理和分发、线程的创建和管理、文件的读写等一系列操作。 接口是函数的集合,它规定了函数的定义和使用方式,以及参数的传递方式等。我们需要了解接口的定义和要求,根据接口规范编写相应的代码实现接口提供的功能。比如,Windows API中的GDI接口提供了一系列函数,可以用于绘制图形、文字等。通过了解GDI接口的规范,我们可以编写代码实现绘制各种图形的功能。 编程实例是一种学习的有效方式,通过实际的案例来演示如何使用Windows API进行开发,可以帮助开发者更好地理解API的使用方法和具体实现。例如,我们可以通过一个窗口程序的编写实例来学习窗口的创建、消息的处理等基本操作。通过编程实例的实践,我们可以加深对Windows API的理解,并能够更加熟练地运用它进行开发。 总之,Windows API开发是一种利用操作系统提供的函数、接口来进行软件开发的方式。在API开发中,函数是实现具体功能的代码块,接口是描述函数调用方式和参数要求的规范。编程实例则帮助开发者更好地掌握API的使用方法和实现技巧。通过深入学习和实践,我们能够更加熟练地使用Windows API进行开发。 ### 回答2: Windows API开发是指利用Windows操作系统提供的应用程序接口(API)来进行软件开发的过程。在Windows API开发中,函数、接口以及编程实例是非常重要的组成部分。 函数是Windows API开发中的基本单位。函数是一段可重复使用的代码,用于执行特定的任务。Windows API提供了大量的函数供开发者使用,这些函数可以用于实现各种功能,比如创建窗口、绘制图形、处理消息等等。开发者可以根据需要选择适合的函数来完成相应的任务。 接口是Windows API开发中定义函数的规范。接口定义了函数的名称、参数以及返回值等信息,开发者在使用函数之前必须先了解接口的相关信息。通过查阅开发文档或者使用开发工具提供的帮助文档,开发者可以获得接口的详细信息,并根据接口的要求来使用函数。 编程实例是Windows API开发中的具体应用案例。通过编程实例,开发者可以了解如何使用Windows API来完成具体的功能。例如,一个窗口管理程序可以通过调用Windows API中的函数来创建、移动、调整窗口大小等操作。编程实例可以帮助开发者更好地理解函数和接口的使用方法,从而提高开发效率。 总之,函数、接口和编程实例是Windows API开发中的重要组成部分。了解函数的功能、接口的规范以及编程实例的具体应用,可以帮助开发者更好地进行Windows API开发,实现各种功能丰富的软件应用。 ### 回答3: Windows API(Application Programming Interface)是一套由微软提供的函数和接口,允许开发者在Windows操作系统上创建应用程序。下面将详细介绍函数、接口和编程实例。 函数在Windows API开发中起到了关键作用。函数是一段经过封装的可重用代码,它们执行特定的任务并返回一个结果。在Windows API开发中,函数用于执行各种操作,例如图形绘制、文件读写、网络通信等。开发者可以通过调用这些函数来实现各种功能。 接口也是Windows API开发中非常重要的概念。接口定义了一组规范,规定了函数的使用方式和参数。通过使用接口,开发者可以方便地调用底层的函数,并实现与Windows操作系统的交互。Windows API提供了许多接口,例如图形设备接口(GDI)、用户界面接口(UI)、网络接口等。通过使用这些接口,开发者可以在应用程序中实现各种功能。 编程实例是通过实际的代码示例来演示如何使用函数和接口。例如,要创建一个Windows窗口应用程序,开发者可以使用Windows API中的函数和接口来实现。首先,开发者可以使用CreateWindow函数创建一个窗口,并设置窗口的属性。然后,可以使用SendMessage函数向窗口发送消息,以实现交互功能。最后,通过调用ShowWindow函数显示窗口,使其可见。 总而言之,Windows API是一个强大的开发工具,它提供了丰富的函数和接口,可以帮助开发者创建各种应用程序。通过使用函数和接口,开发者可以实现各种功能,从简单的图形绘制到复杂的网络通信。希望这篇文章对理解Windows API的函数、接口和编程实例有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值