Protocol Buffers에서 Type Script의 유형 정의 만들기

gRPC의 Protocol Buffers에서 Type Script의 유형 정의 메모를 작성합니다.

전제 조건


Protocol Buffers란 무엇입니까?


구글이 개발한 인터페이스 정의 언어는 gRPC를 사용할 때 클라이언트/서버 코드를 생성하는 데 사용된다.
다음 메시지와 서비스를 통해 인터페이스를 정의합니다.
syntax = "proto3";

package Posts;

import "google/protobuf/empty.proto";

message Post {
  int32 id = 1;
  string title = 2;
  string content = 3;
}

service Posts {
  rpc GetPosts(google.protobuf.Empty) returns (GetPostsResponse) {};
}

Protocol Buffers의 Type Script 유형 정의 생성


를 사용하여 클라이언트/서버 코드가 생성될 때 TypeScript의 유형 정의와 함께 생성된 단계를 기록합니다.
ts-protoc-gen

1. 프로젝트 제작, 프로그램 라이브러리 설치에 의존


npm 프로젝트를 만들고 의존 프로그램 라이브러리를 설치합니다.
추가할 프로그램 라이브러리는 다음과 같습니다.

  • https://github.com/improbable-eng/ts-protoc-gen: Protocol Buffers의 컴파일러입니다.클라이언트/서버 코드 생성

  • grpc-tools : Node.js제 gRPC 클라이언트생성된 클라이언트/서버 코드에 사용

  • @grpc/grpc-js: Protocol Buffers의 런타임 라이브러리입니다.생성된 클라이언트/서버 코드에 사용

  • google-protobuf: Procetocol Buffers에서 TypeScript의 유형 정의를 생성하는 플러그인
  • # プロジェクト作成
    $ yarn init -y
    # 依存ツールのインストール
    $ yarn add @grpc/grpc-js grpc-tools google-protobuf ts-protoc-gen
    

    2. protoc 파일 추가


    gRPC API 설계서로 Protocol Buffers.proto 파일을 추가합니다.
    $ mkdir proto
    $ touch proto/message.proto
    
    message.소개의 내용은 다음과 같다.
    proto/message.proto
    syntax = "proto3";
    
    package Posts;
    
    import "google/protobuf/empty.proto";
    
    message Post {
      int32 id = 1;
      string title = 2;
      string content = 3;
    }
    
    message GetPostsResponse {
      repeated Post posts = 1;
    }
    
    message AddPostRequest {
      Post post = 1;
    }
    
    message AddPostResponse {
      Post post = 1;
    }
    
    service Posts {
      rpc GetPosts(google.protobuf.Empty) returns (GetPostsResponse) {};
      rpc AddPost(AddPostRequest) returns (AddPostResponse) {};
    }
    

    3 코드 생성


    Protocol Buffers에서 클라이밍 서버 코드, Type Script 유형 정의를 생성합니다.package.jsoncodegen 스크립트를 추가합니다.
    package.json
    {
      "scripts" : {
        "codegen": "grpc_tools_node_protoc -I ./proto --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./generated --grpc_out=grpc_js:./generated --ts_out=service=grpc-node,mode=grpc-js:./generated ./proto/*.proto"
      },
      "dependencies": {
        "@grpc/grpc-js": "^1.2.3",
        "google-protobuf": "^3.14.0",
        "grpc-tools": "^1.10.0",
        "ts-protoc-gen": "^0.14.0"
      }
    }
    
    codegen 스크립트는 grpc-toolsProtocol Buffers를 통해 클라이언트/서버 코드를 생성하도록 정의했습니다.
    플러그 인protoc-gen-ts을 지정하면 Type Script의 유형 정의와 함께 생성됩니다.
    각본의 상세한 내용은 여기에 있다.
    grpc_tools_node_protoc -I <.protoファイルのディレクトリ> --plugin=<プラグイン名>=<プラグインのパス> --js_out=<オプション>:<クライアントコード生成先パス> --grpc_out=<オプション>:<サーバーコード生成先パス>  --ts_out=<オプション>:<TypeScript型定義生成先パス> <生成元のProtocol Buffersのパス>
    
    실행해 보세요.
    # 生成先ディレクトリの作成
    $ mkdir generated
    # コード生成スクリプトの実行
    $ yarn codegen
    
    ./generated 부하들은 서버 클라이언트 코드, TypeScript의 유형 정의를 생성해야 한다.
    ~/s/z/proto ❯❯❯ tree -I node_modules
    .
    ├── generated
    │   ├── message_grpc_pb.d.ts
    │   ├── message_grpc_pb.js
    │   ├── message_pb.d.ts
    │   └── message_pb.js
    ├── package.json
    ├── proto
    │   └── message.proto
    └── yarn.lock
    

    참고 자료

  • ts-protoc-gen
  • OK Google, Protocol Buffers에서 생성된 코드 Node를 사용합니다.js에서 gRPC 통신
  • gRPC on Node.js with Buf and TypeScript — Part 1 | by Slavo Vojacek | Medium
  • 좋은 웹페이지 즐겨찾기