关于Java Chassis 3的契约优先(API First)开辟

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

本文分享自华为云社区《Java Chassis 3技术解密:契约优先(API First)开辟》,作者: liubao68。
契约优先(API First)开辟是指应用步伐开辟过程中,将API设计作为第一优先级的任务。契约优先开辟随着Web Services概念的发展而不断得到器重,特殊是微服务架构出现以后,API设计成为影响功能开放、性能优化等问题的关键因素。常见的契约优先开辟框架和模式有如下几种:

  • Web Services技术可以由设计职员先编写WSDL描述WEB服务内容,然后结合工具生成代码。WSDL可以进行分发,不同的语言都可以结合WSDL生成客户端。
  • gRPC技术可以由设计职员先编写IDL描述RPC服务内容,然后结合工具生成代码。gRPC主要解决服务内部之间的调用。
  • Spring Boot答应开辟职员使用swagger工具,先编写Open API接口,然后通过工具生成RESTFul的服务端代码。
这些技术都要求设计职员掌握一种语言无关的描述语言(WSDL、IDL、Swagger等),而且通过工具生成具体语言的代码。它们支持的应用场景也有所差异,Web Service适合对外的WEB服务,gRPC适合对内的RPC服务。Java Chassis契约优先开辟具备下面的几个改进:

  • 答应直接使用Java语言界说服务接口,不需要设计者掌握新的描述语言。
  • 同时界说Web服务接口和内部RPC接口。
和Spring Boot一样, Java Chassis的语言无关性描述语言仍然是Open API,通过Open API,可以满足跨语言和服务分发的要求。
契约优先开辟的过程

契约优先开辟可以涵盖设计、开辟、测试、部署、运维等软件开辟的全流程,通过契约可以实现不同环节的并行工作,从而进步开辟效率。 一个简单的契约开辟过程如下:

下面通过代码简单展示通过Java语义界说契约,并实现提供者和斲丧者的过程。

  • 界说服务契约
  1. @RequestMapping(path = "/provider")
  2. public interface ProviderService {
  3.   @GetMapping("/sayHello")
  4.   String sayHello(@RequestParam("name") String name);
  5. }
复制代码

  • 界说提供者
  1. @RestSchema(schemaId = "ProviderController", schemaInterface = ProviderService.class)
  2. public class ProviderController implements ProviderService {
  3.   @Override
  4.   public String sayHello(String name) {
  5.     return "Hello " + name;
  6.   }
  7. }
复制代码

  • 界说斲丧者
  1. @Configuration
  2. public class ProviderServiceConfiguration {
  3.   @Bean
  4.   public ProviderService providerService() {
  5.     return Invoker.createProxy("provider", "ProviderController", ProviderService.class);
  6.   }
  7. }
复制代码
使用RPC方式访问提供者。
  1. @RestSchema(schemaId = "ConsumerController", schemaInterface = ConsumerService.class)
  2. public class ConsumerController implements ConsumerService {
  3.   private ProviderService providerService;
  4.   @Autowired
  5.   public void setProviderService(ProviderService providerService) {
  6.     this.providerService = providerService;
  7.   }
  8.   @Override
  9.   public String sayHello(String name) {
  10.     return providerService.sayHello(name);
  11.   }
  12. }
复制代码

  • 服务分发和Web服务访问
提供者的服务界说会生成如下Open API信息
  1. openapi: 3.0.1
  2. info:
  3.   title: swagger definition for org.apache.servicecomb.samples.api.ProviderService
  4.   version: 1.0.0
  5. servers:
  6. - url: /provider
  7. paths:
  8.   /sayHello:
  9.     get:
  10.       operationId: sayHello
  11.       parameters:
  12.       - name: name
  13.         in: query
  14.         required: true
  15.         schema:
  16.           type: string
  17.       responses:
  18.         "200":
  19.           description: response of 200
  20.           content:
  21.             application/json:
  22.               schema:
  23.                 type: string
  24.             application/protobuf:
  25.               schema:
  26.                 type: string
  27.             text/plain:
  28.               schema:
  29.                 type: string
  30. components: {}
复制代码
这个信息可以用于WEB服务访问,比如上面的信息可以使用
  1. GET /providers/sayHello?name=World
复制代码
的HTTP哀求来访问。 对于其他框架或者语言,也可以使用Open API生成对应的代码来访问。
服务治理

服务治理被设计为独立于开辟过程,结合Open API和服务治理规则描述语言,能够对API进行服务治理配置。
  1. servicecomb:
  2.   matchGroup:
  3.     helloOperation: |
  4.       matches:
  5.         - apiPath:
  6.             prefix: "/provider/sayHello"
  7.   rateLimiting:
  8.     ## 限流器每10毫秒允许通过100个请求,如果一个请求超过1000毫秒没有获取到
  9.     ## 许可,将被拒绝
  10.     helloOperation: |
  11.       rate: 100
  12.       limitRefreshPeriod: 10
  13.       timeoutDuration: 1000
复制代码
上述规则对API接口进行限流控制。
契约优先开辟的其他方面

测试方面,可以通过契约生成主动化测试代码,以覆盖API的测试。 部署实行方面,可以将Open API信息导入网关,实现API本领开放、认证鉴权、计费等。 此外,契约还可以用于文档生成、应用监控统计等各个方面。
总结

Java Chassis基于JAVA语言的接口界说,可以同时满足Native语言宁静台无关描述语言两种情况的SDK分发,而且不需要使用工具生成额外的运行代码,给外部服务开辟和内部服务开辟提供了同一划一的开辟体验。 契约优先开辟是面向服务化/微服务化非常高效的过程方法,Java Chassis给支持契约优先开辟提供了很好的工具支持。
 
点击关注,第一时间相识华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表