契约优先(API First)开发是指在应用程序开发过程中,将API设计作为首要任务的一种方法。随着微服务架构的兴起,API设计变得愈发重要,因为它直接影响着功能开发、性能优化等方面。
常见的契约优先开发框架和模式包括以下几种:
- Web Services技术:设计人员可以先编写WSDL描述Web服务的内容,然后利用工具生成代码。这种方法适用于对外提供的Web服务,支持跨语言调用。
- gRPC技术:设计人员可以先编写IDL描述RPC服务的内容,然后利用工具生成代码。gRPC主要用于服务内部之间的调用。
- Spring Boot:开发人员可以利用swagger工具,先编写Open API接口描述,然后通过工具生成RESTFul的服务端代码。
这些技术都要求设计人员掌握一种语言无关的描述语言(如WSDL、IDL、Swagger等),并且通过工具生成具体语言的代码。它们支持的应用场景有所不同,例如Web Service适用于对外的Web服务,而gRPC适用于对内的RPC服务。
Java Chassis 3在契约优先开发方面具有以下几个改进:
- 直接使用Java语言定义服务接口:无需设计者掌握新的描述语言,可以直接使用Java语言来定义服务接口。
- 同时定义Web服务接口和内部RPC接口:Java Chassis允许同时定义Web服务接口和内部RPC接口,提高了开发的灵活性。
- 语言无关性描述语言仍然是Open API:和Spring Boot一样,Java Chassis的语言无关性描述语言仍然是Open API,通过Open API可以实现跨语言和服务分发的需求。
契约优先开发的过程可以涵盖设计、开发、测试、部署、运维等软件开发的全流程,通过契约可以实现不同环节的并行工作,提高开发效率。一个简单的契约开发过程包括以下几个步骤:
- 定义服务契约:设计人员可以使用Java语言定义服务接口。
- 实现提供者:根据定义的服务契约,开发人员实现具体的服务提供者。
- 实现消费者:开发人员可以使用RPC方式访问服务提供者,并实现服务消费者。
- 服务分发和Web服务访问:根据服务契约生成Open API信息,用于Web服务访问。
- 服务治理:使用服务治理规则描述语言对API进行服务治理配置,如限流控制等。
除了以上提到的方面,契约优先开发还可以用于自动生成测试代码、文档生成、应用监控统计等各个方面。Java Chassis基于Java语言的接口定义,既支持Native语言,又支持平台无关描述语言,为外部服务开发和内部服务开发提供了统一一致的开发体验。契约优先开发是面向服务化/微服务化非常高效的过程方法,在这方面,Java Chassis为支持契约优先开发提供了良好的工具支持。