数ヶ月前、私たちは EntスキーマからGo gRPC サーバーを生成する実験的な機能をアナウンスしました。 実装はまだ完了していませんでしたが、コミュニティに実験してもらい、フィードバックを提供してもらうために公開しました。
コミュニティから多くのフィードバックをいただいた結果、本日、EntとgRPCの統合が「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 + gRPCを始めるのを助けるために。 公式の Ent+gRPCチュートリアル (と無料の GitHubレポジトリ)を公開しました。
- Ent + gRPCを始めるのに助けが必要ですか?それとも他の質問がありますか? Join us on Slack or our Discord server.
- Subscribe to our Newsletter
- Twitterをフォローする
- Gophers slackの#entチャネルに参加する
- Join us on the Ent Discord Server