前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务化最佳实践

服务化最佳实践

作者头像
WindWant
发布2020-09-11 16:05:45
7750
发布2020-09-11 16:05:45
举报
文章被收录于专栏:后端码事

一、分包分发

建议将服务接口、服务模型、服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

异常声明处理是服务调用中不可缺少的部分。通常服务提供方定义明细业务错误异常码,调用方进行捕获处理。进一步的异常规约我们稍后会具体说明。

二、接口粒度

接口粒度:服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题。也就是说同一个操作功能场景尽可能囊括到一个服务里,减少调用关联方。

抽象:服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。

三、服务版本

如果可能,有必要细粒度版本化到服务接口级别,以更好的控制服务迭代升级。

建议使用两位版本号,因为第三位版本号通常表示兼容升级,只有不兼容时才需要变更服务版本。

当不兼容时,先升级一半提供者为新版本,再将消费者全部升为新版本,然后将剩下的一半提供者升为新版本。

四、升级兼容性

除非是新的功能服务接口,旧的服务升级必须处理接口的向后兼容性。

接口增加参数或者返回值增加字段一般可以兼容,涉及修改或者删除则及枚举类型使用时,则需要通过版本号升级处理。

枚举值:

如果是完备集,可以用 Enum,比如:ENABLE, DISABLE

如果是业务种类,以后明显会有类型增加,不建议用 Enum,可以用 String 代替。

如果是在返回值中用了 Enum,并新增了 Enum 值,建议先升级服务消费方,这样服务提供方不会返回新值。

如果是在传入参数中用了 Enum,并新增了 Enum 值,建议先升级服务提供方,这样服务消费方不会传入新值。

五、序列化

服务参数及返回值建议使用 POJO 对象,即通过 setter, getter 方法表示属性的对象。

服务参数及返回值都必须是传值调用,而不能是传引用调用,消费方和提供方的参数或返回值引用并不是同一个,只是值相同。

六、关于调用异常

建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,并且语义更友好。

如果担心性能问题,在必要时,可以通过 override 掉异常类的 fillInStackTrace() 方法为空方法,使其不拷贝栈信息。

查询方法不建议抛出受检异常,否则调用方在查询时将过多的 try...catch,并且不能进行有效处理。

服务提供方不应将 DAO 或 SQL 等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常。

七、参数检查过滤

调用方及服务方都应该对输入参数进行校验。可以通过统一的拦截方式处理。

如通过检查空值、参数长度等进行过滤,减少不必要的调用资源消耗及异常隐患,

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、分包分发
  • 二、接口粒度
  • 三、服务版本
  • 四、升级兼容性
    • 枚举值:
    • 五、序列化
    • 六、关于调用异常
    • 七、参数检查过滤
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档