美文网首页
远程接口设计

远程接口设计

作者: zxRay | 来源:发表于2018-04-05 19:22 被阅读69次

近来使用了各个系统的接口,也设计了一些接口供他人使用。吸取一些吐槽跟被吐槽间的点,做点总结。

1. 提供干净的依赖包

在使用接口的时候,最痛苦的莫过于依赖包的冲突。解决包冲突是一个十分费时且无聊的工作,并且有些冲突在启动时不会暴露,最后造成线上故障。而有些冲突压根就不能解决,导致接口无法引入。

2. 使用包装类

基本类型无法提供Null语义。很多序列化框架对于基本类型会将Null解析成0,而0与Null是两种不同语义。同时,数据库状态,枚举值建议也不要定义成0

3. 不要使用过多参数

一个接口参数过多是非常难以理解跟扩展的,对于这种情况一般使用Request对象包装参数,考虑后续可扩展性,也可在Request加以一个扩展Map字段

Request{
    ...
   Map attributes;
}

4. 返回值

一个好的接口返回值非常重要,如下面的仓库提供的发货接口

/**返回一个快递单号**/
Long deliveryOrder(Long orderId)

这个接口的返回值有以下几个问题:

  1. 接口返回Null,通常代表业务执行失败。那么失败的原因没有上抛,不方便调用者后续处理,也无法进行错误统计监控
  2. 接口出错的情况有很多,有框架层面,有系统层面,也有业务层面,统统使用异常往上抛,使用不方便
  3. 如果这个接口调用失败, 那么调用者要不要进行重试。如果接口没幂等,重复调用会出现多次发货,造成资损

稍做修改返回Result对象

Result<Long> deliveryOrder(Long orderId)

Result<T>{
   T getData()
   String getErrorCode()
   String getErrorMsg()
   boolean isSuccess()
   boolean canRetry()
}
  1. isSuccess: 表示业务是否执行成功。其他框架异常通过异常抛出
  2. 提供错误码让调用者可以根据不通错误码进行不通处理,同时也可以配置错误码监控大盘,方便统计报警
  3. canRetry: 某些业务错误,压根就没必要进行重试,可提供此函数供调用者使用。

5. 幂等

现有的RPC框架基本都会进行超时重试,如果接口不幂等的话,结果不可想象

6. 使用DTO

系统分层设计后,为了各层之间的松耦合可能会设计各种DO,VO,BO,甚至还有View层Query对象,DAO层Query对象,让人防不胜防。但是,当对外提供接口时,尽量使用DTO包装。使用DTO可以在修改系统内部数据结构的时候不影响对外接口,同时也可以保证数据安全

7. 使用client包装

对于一些不合规范的老接口,可以使用Client也就是装饰模式进行包装

8. 日志

接口异常路径必须打上日志,写上错误原因并且带上请求参数。如果条件允许,也可以在入口处打印接口被调用并且附上请求参数

相关文章

  • 远程接口设计

    近来使用了各个系统的接口,也设计了一些接口供他人使用。吸取一些吐槽跟被吐槽间的点,做点总结。 1. 提供干净的依赖...

  • 分别写远程系统命令执行与代码执行漏洞原理

    分别写远程系统命令执行与代码执行漏洞原理 远程命令执行原理:应用系统从设计上需要给用户提供指定的远程命令操作的接口...

  • 8.2 Service3

    Binder机制 IBinder:1.远程对象的基本接口,是为了高性能而设计的轻量级远程调用机制的核心部分; ...

  • RMI远程调用

    温故而知新可以为师矣 1.远程接口 2.远程接口实现类 3.注册远程服务接口 4.远程客户端调用

  • RCE漏洞

    远程命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器...

  • Vue 微前端&微服务解决方案, Genesis 对远程组件进一

    对远程组件进一步的设计和思考 远程组件,是 Genesis 提出的一个概念,它是指通过接口,调用一个另一个服务的组...

  • H5移动端常见问题

    解决jquery ajax调用远程接口的跨域问题 首先,接口必须允许远程调用.这是后端或者运维的事情.你必须保证你...

  • 分布式-RMI

    RMI(RemoteMethodInvoke远程方法调用) 主要涉及的接口和类如下图所示: 接口Remote: ...

  • java远程调试

    本文档实现调用远程接口,远程服务调用本地代码调试。(保持本地代码和远程代码一致) 远程服务器配置在远程服务器启动参...

  • Http请求实践

    后台开发时,经常需要进行系统对接,远程接口调用非常普遍,现总结一下针对http接口的远程调用 常用工具: Http...

网友评论

      本文标题:远程接口设计

      本文链接:https://www.haomeiwen.com/subject/vmjdhftx.html