今天聊一聊后台工程师(java初级工程师)的工作日常,微服务还有API。
导语:哎日常工作不就是增删改查吗!
其实初级工程师的日常工作还真是增删改查。不过却也没那么简单。谈一下需要做好的工作吧
-
接口设计
-
代码设计
API设计其实不是一个简单的活,业界认可的就是restful 规范,其次,就是接口文档。要是你能够定义一套规范的restful 的api,那层次算特别高的了。
其次,要维护一套文档。
再者,api是对外的,对内的,就是你的代码结构,一个好的项目就是23种设计模式的有机结合。用好这写设计模式,也是需要时间沉淀的。
最后,就是微服务的划分。其实微服务的划分这个有点属于架构师的工作范畴了,常见是基于业务领域的服务划分,划分过细的话,分分钟一个保存操作,涉及三四个分布式事务。
本篇就讨论一下微服务API吧
一、微服务的API设计
1.1.思想
之前领导是一个特别牛逼的偏前端的全栈工程师,那时候,我刚毕业对于一些api的设计理解有点偏,就是有点像是乱开接口。参数类型等等,定义不规范。那时候,给我看了几家他就职过的大厂的接口的demo,引导我那种design在哪种场景更加合适。还有小接口,大接口。
总结起来就是:
不是为了一个功能方法而去开放一些需要的接口,而是为了一个功能模块,我们后台需要去开一套维度合适的接口。
有一个特别快的提升方式,跟一个前端工程师交朋友,每天问他,现在给的接口用起来会不会更爽一点。
1.2.服务提供者,和消费者
见过几个厂的微服务架构。其实大同小异。对于服务的提供者和消费者,都有自己的见解。但是在我看过的几个项目,也有跟其他大神讨论过,可以总结出来,大概有两种形式吧:
- 提供者既是消费者:
- 提供者与消费者分层:
在这里得讲两个概念,外部接口,内部接口。
外部接口其实没啥可解释的。
内部接口,就是提供给其他微服务的接口,可以理解为service层的远程实现,一般来说,是不对外开放。
服务提供者,就可以理解为是平时单机架构里面的service层,
而消费者,就是调用一或多个service,进行业务逻辑操作,在某厂称为business层。
消费者开的是外部接口,提供者开的是内部接口。
在下面的项目里面,其实就是提供者既是消费者,但是,我在zuul里面没有做控制而已。
1.3.微服务的API以及接口
对于服务的消费者,一般写的API,都是要遵循restful规范。
对于服务的提供者,我感觉,把他看成一个用http协议的远程接口就OK了,如果要用restful规范,会失去一定的灵活性(在做接口设计的时候是可以体会得到的)。
从两个维度说吧:
- 框架方面
比如说,阿里的dubbo,新浪的motan,的服务提供者都是RPC框架实现的。你说要基于restful 吗?
- 其他方面(分布式事务等)
先普及一下分布式事务:
一般来说,微服务架构,多数使用的是柔性事务(基于业务代码的事务,不是基于资源的事务)有三种:
- 基于消息的最终一致性事务
- TCC事务
- 最大努力通知型事务
比如说,一个提供者接受到一个请求,需要跨服务保存操作。这样就涉及到分布式事务,使用消息的最终一致性事务的话,是发一条消息过去,而用TCC的话,一个保存操作又有了一个取消接口,确认接口。一个服务提供者,写的接口也要遵循 restful design的话,******,所以说,不要太较真,物极必反。
接口校验
其实过滤器是公司统一的,其次就是一些接口校验了。其实也没啥好说的。一般@Vaild校验的都是格式,长度,大小之类的。判空的一般会在Controller里面的业务逻辑里面做。
异常处理
其实更准确的来说,是状态码。
状态码处理的话主要分两种,一种是消费者的,一种是提供者的。
消费者的状态码:
其实就是给前端的状态码,比如说,有时候,你点击一个按钮,显示,服务器繁忙请稍后再试,很多时候,前端显示的提示信息,都是根据后台给的状态码,还有信息显示的。
提供者的状态码:
在Spring Cloud中,可以理解为Feign Client调用服务失败,要怎么处理,比如说,你去调一另外一个服务查询,返回500,其实可能有时候,那个服务当掉了,这时候,你重试,再去调一次(基于负载均衡,调的是另外一台服务器)可能就OK了,但是,如果,返回个不存在,这时候你重试是没有意义的。
最后上代码
allen-api-demo用到了 SPRING MVC + SWAGGER + OAUTH
水平有限,只是写了一些API文档的维护,校验,异常处理,接口权限,返回视图的简要使用方式。
再来一个今年一月多写的
flexible-transaction-event-demo 基于消息的最终一致性事务
TCC的,看了挺多设计方法,也有再加一个事务的协调者的。后面再慢慢分享出来吧。
结语
自己的学习路程是先打好基础,然后分课题学习。我觉得大概我研究完这几个课题应该就有中级工程师水准了
- 软件工程
- API设计
- 分布式事务
- 消息中间件
- 数据库
- 设计模式
自己研究的比较好的课题是API设计,然后自己花的最多时间去吃的是分布式事务。再者,
网友评论