メインコンテンツへスキップする

Ent + gRPCは使用可能です

· 1 分で読む

数ヶ月前、私たちは EntスキーマからGo gRPC サーバーを生成する実験的な機能をアナウンスしました。 実装はまだ完了していませんでしたが、コミュニティに実験してもらい、フィードバックを提供してもらうために公開しました。

コミュニティから多くのフィードバックをいただいた結果、本日、EntgRPCの統合が「Ready for Usage」となりました。これは、基本的な機能がすべて完成していることを意味し、ほとんどのEntアプリケーションがこの統合を利用できることを期待しています。

最初の発表から何が追加されたのでしょうか?

  • "Optional Fields"のサポート - Protobufに共通する問題は、nil値の表現方法です。ゼロ値のプリミティブ・フィールドは、バイナリ表現にエンコードされません。 つまり、アプリケーションはプリミティブ・フィールドのゼロと「存在しない」を区別することができません。 これをサポートするために Protobuf プロジェクトは "Well-Known-Types" をサポートし、プリミティブ値を構造体でラップします。 これは以前はサポートされていませんでしたが、現在ではentprotoがProtobufメッセージ定義を生成する際に、これらのラッパー型を使用して"Optional"のentフィールドを表現します。

    // Code generated by entproto. DO NOT EDIT.
    syntax = "proto3";

    package entpb;

    import "google/protobuf/wrappers.proto";

    message User {
    int32 id = 1;

    string name = 2;

    string email_address = 3;

    google.protobuf.StringValue alias = 4;
    }
  • マルチエッジのサポート -
    protoc-gen-entgrpcの最初のバージョンをリリースした時、「ユニーク」なエッジに対するgRPCサービスの実装の生成のみをサポートしていました。 (つまり、1つだけのエンティティしか参照できませんでした)。 直近のバージョンから、 このプラグインは、O2MおよびM2Mの関連を持つエンティティを読み書きするためのgRPCメソッドの生成をサポートしています。

  • Partial responses - デフォルトでは、サービスのGetメソッドでエッジの情報は返されません。 これは、1つのエンティティに関連するエンティティの量が束縛されていないため、意図的に行われています。

    エッジの情報を返すかどうかを呼び出し側が指定できるように、生成されたサービスは、Google AIP-157(Partial Responses)に準拠しています。 つまり、 Get<T>Request メッセージには、Viewという名前のenum型が含まれており、このenum型によって、呼び出し側は、この情報をデータベースから取得するかどうかを制御できます。

    message GetUserRequest {
    int32 id = 1;

    View view = 2;

    enum View {
    VIEW_UNSPECIFIED = 0;

    BASIC = 1;

    WITH_EDGE_IDS = 2;
    }
    }

はじめましょう

より多くのEntのニュースと最新情報をお届けします