阿里云云原生架构实践
上QQ阅读APP看书,第一时间看更新

3.1.2 IDL定义

IDL定义是指通过IDL(Interface Definition Language,接口定义语言)对服务进行规约定义。如Google gRPC、Apache Thrift等,这些都属于IDL范畴。首先,我们需要基于IDL定义对应的服务接口,然后基于这些IDL文件生成与编程语言对应的代码,实现对应的服务接口,或者调用对应的服务。下面以Google gRPC为例进行说明,首先我们需要基于Protocol Buffers语义编写一个IDL文件,如account.proto,内容如下:


service AccountService {
    rpc FindAccount (GetAccountRequest) returns (AccountResponse);
    rpc FindById (google.protobuf.Int32Value) returns (AccountResponse);
}

message GetAccountRequest {
    int32 id = 1;
}

message AccountResponse {
    int32 id = 1;
    string nick = 2;
}

定义接口之后,根据protoc命令行为不同的编程语言生成对应的代码,如C++、Go等。当然,对于Java,我们可以将代码生成整合到构建工具Maven或Gradle中;对于Node.js,我们可以使用gRPC工具。由此可见,不同的编程语言基于IDL的文件处理手段可能会有所不同。IDL的好处是统一了定义服务接口的方式,因此我们需要学习和了解IDL。幸好IDL并不复杂,学习起来比较容易。不过,对应到具体的技术产品会比较复杂一些,如gRPC涉及对应的代码生成工具开发、不同编程语言的SDK开发等。