作者:泥瓦匠
SOA 场景,服务 A 会引用服务 B 的 API 包,然后调用服务 B 。前后分离场景,走 RESTful HTTP 服务给前端也是类似。那么 API 包里面一般包括有哪些?
业务接口没啥好聊的。聊聊业务入参,入参一般包括:基础类(IP、来源等)、有分页需要分页类、还有重要的业务入参等。 前面两个 基础信息(IP、来源等)、有分页需要分页信息也一般设计成这样,继承关系:
public class BaseParam implements Serializable {
private String machineName;
...
}
public class PageParam extends BaseParam {
private String pageNum;
...
}
注意,序列化要实现的,序列化的可以看看这个文章 http://www.infoq.com/cn/articles/serialization-and-deserialization。第二可以加上 @Data 注解,会使用 Lombok 工具来消除冗长的 Java 代码,尤其是 POJO 的 getter / setter 方法。具体查看 Lombok 官网地址:projectlombok.org。
业务入参呢?一般要么继承 BaseParam ,一般要么继承 PageParam 分页查询服务。业务入参,有时候也有个巧的用法,入参字段里面使用接口,然后业务方来选择具体传什么实现类。比如:
public class AParam extends BaseParam {
private AValue value;
...
}
public interface AValue {
String toString();
}
public class AValueRange implements AValue, Serializable {
private Long gte;
private Long lte;
}
public class AValueString implements AValue, Serializable {
private String vale;
}
出参提供一个 BaseResult,包含返回码,返回信息及请求 IP等。PlainResult 单个结果集,ListResult 列表结果集,MapResult... 常规包括,code、msg、对象等,这里的 code 跟 HTTP 协议的 code 是有点映射,但也有区别。
业务服务内业务错误,不是说 HTTP 协议响应码错误。所以 HTTP 响应是 200 ok,但响应体中告知接受业务方具体业务错误信息。
好比 有个 HTTP 服务 A ,URI 是 /a?name=BYSocket 你想访问 A 服务,访问了 /b ,会告诉你 400 ,这是就是 HTTP 协议响应了 但你访问 /a,没有带 name 过来,响应 200 ,响应体的错误码返回 name 为空,业务错误码 xxxx。这样是对的
对了,还有 base 、page 都可以封装一个 jar ,公用到 common 包,统一。
顾名思义,随机取一条数据。这个性能比较差,具体可以参考优化版本:
https://blog.csdn.net/leaway211/article/details/40948
老是新开一个项目,新开一个项目。。。。 用 spring boot 虽然配置已经少了,也少不了一些各种某一类的业务 java config 配置。常用的可以直接放到脚手架上面,比如 spring boot 的官方地址:
https://start.spring.io/
那么,spring boot 某个公司某一个大类业务的脚手架工程,可以用 https://github.com/spring-io/initializr/ 开源项目进行修改,进行定制,服务更好的新业务新工程。
看图中右上角的 github 地址就在那。