前言 在 Java 的 Web 世界中,构建Web应用最为常见的 dispatcher 框架,老一点的 Struts 系列,现在最为流行的 SpringMVC。它们起初的目标都是构建基于模板的 web 应用程序,也就是作为一名当时的程序员,前后端都得会。 而随着分布式系统 和 互联网的发展,前后端分离、后端服务化的趋势越来越明朗,SpringMVC 加入了诸如 @RestController 这样概念性的 annotation 以 restful 风格的 webservice call 来语义上支持前后分离 和 后端的服务化。前端程序员不强调必须会后端,后端程序员也不强调必须要会前端,JAX-RS 不论用来做 Web 与前端程序员的分离,atv, 或者后端一系列的服务都是一个非常好的选择。 从 51cto 来的图来表述前后端分离: 从百度查来的后端分布式服务图: 1对应后端概念 相信资历比较老一些的研发,或多或少得接触过 SOA(Service Oriented Architecture)、ESB(Enterprise Service Bus)、RPC(Remote Procedure Call), 还有最近的微服务 这些概念即是为构建复杂的分布式系统而生,为后端服务化提供一套套解决方案的思路。 ESB 企业资源总线例子图(百度来的与作者理解一致的图,作者很懒): 2概念的 Implementations 这些思路的出现,也有着对应的 java 框架进化着 ——— 从遥远过去的程序员制定规则到 SOAP 标准的出现到 Sun 建立的 Restful webservice 标准 — JAX-RS, 再到后来基于 Netty 的一系列 RPC 框架, 诞生了非常非常多优秀的 Java 框架,如下面举一些我的程序职业中见过得一些例子。 WebService的SOAP标准系列: Apache Axis2、Codehaus XFire、Apache CXF Rest 的 WebService 的 JAX-RS 系列: RestEasy、Jersey、CXF 基于 Netty 的 RPC 系列: Finagle、JProtobuf(我们点融内部服务项目在使用这个RPC框架)、Thrift、apache avro 它们让我们从使用菜刀的冷兵器战场到使用AK47的热兵器时代。 3派别模式的优点和区别 在我的 java 世界中有两个派别:第一派即 j2ee 系列,走的是标准化道路,先有标准的定义,再由具体厂商去实现,再慢慢地进化标准; 另一派走得比较敏捷一些(Spring 系列), 反设计模式的特性,使得这一派如鱼得水;它们共同构成了 java web 的世界,模式不同但又相互交融。 j2ee、spring 类似的对比图: 讲了这么多,我们进入我将要介绍的正题——JAX-RS, 它属于 Restful 系列的标准、是 j2ee 系列中的产物之一。 那么何为标准呢?标准就像你我写程序时定义的 interface,我拿着接口使用其中一个实现,即可实现系统的交互; 标准,也如同攻城射击狮画攻城图纸使用了神器-UML (统一建模语言), 画出来的东西,程序员就能够直接懂里面发生了什么, 大大减少非标准路子造成的程序员之间的沟通问题; 是标准 也就提供了通过编程序使程序理解程序、自动生成代码的可能性。 JAX-RS 是一种标准也即拥有了这些优点,看了我的后面的代码,你会发现后端程序员可以这样构建 Restful 的 Webservice 服务 和 客户端。 下面的代码中我将介绍一些 JAX-RS 标准能为我们带来的好处,如: 自动生成可与服务器交互的客户端 在客户端、服务端埋点: —— Track可能的性能问题 —— 传递一些作为上游服务器拥有的session类参数给无状态的服务端 —— 其他, 如 配合配置服务器做 服务注册与发现; 由调用方传入 transactionId保证事务最终一致; 使用 token(如 jwt) 来获得 api 的访问权限 etc。 4Talk is cheap, show me the code. 为了避免篇幅过于冗长,代码中仅提供 “四”中明确提出的 3个好处的实现。 (责任编辑:本港台直播) |