Api は、API インターフェースの軽量記述子です。
インターフェースは、.proto ファイル内の "service" キーワードなど、一部のコンテキストでは「プロトコル バッファ サービス」とも呼ばれますが、API サービスとは異なります。API サービスは、インターフェースの具体的な実装を表すものであり、単なるメソッドとバインディングの記述とは対照的です。メッセージ自体の名前など、他のコンテキストでは単に「API」と呼ばれることもあります。詳細な用語については、https://cloud.google.com/apis/design/glossary をご覧ください。
JSON 表現 | |
---|---|
{ "name": string, "methods": [ { object( |
フィールド | |
---|---|
name |
このインターフェースの完全修飾名。パッケージ名の後ろにインターフェースの単純名が続きます。 |
methods[] |
このインターフェースのメソッド。順序の指定はありません。 |
options[] |
インターフェースに添付されたメタデータ。 |
version |
このインターフェースのバージョン文字列。指定する場合、 バージョン設定スキーマでは意味のあるバージョン設定が使用されます。つまり、メジャー バージョン番号は互換性に対応しない変更、マイナー バージョンは追加となる、互換性に対応する変更を意味します。どちらのバージョン番号も、それぞれのバージョンを使用することで想定される結果をユーザーに示すものとなるため、プロダクト プランに基づいて慎重に選択する必要があります。 メジャー バージョンはインターフェースのパッケージ名にも反映されます。 |
sourceContext |
このメッセージによって表されるプロトコル バッファ サービスのソース コンテキスト。 |
mixins[] |
含まれるインターフェース。 |
syntax |
サービスのソース構文。 |
メソッド
Method は API インターフェースのメソッドを表します。
JSON 表現 | |
---|---|
{ "name": string, "requestTypeUrl": string, "requestStreaming": boolean, "responseTypeUrl": string, "responseStreaming": boolean, "options": [ { object( |
フィールド | |
---|---|
name |
このメソッドの単純名。 |
requestTypeUrl |
入力メッセージ タイプの URL。 |
requestStreaming |
true の場合、リクエストがストリーミングされます。 |
responseTypeUrl |
出力メッセージ タイプの URL。 |
responseStreaming |
true の場合、レスポンスがストリーミングされます。 |
options[] |
メソッドに関連付けられる任意のメタデータ。 |
syntax |
このメソッドのソース構文。 |
Option
メッセージ、フィールド、列挙型などに関連付けることのできるプロトコル バッファ オプション。
JSON 表現 | |
---|---|
{ "name": string, "value": { "@type": string, field1: ..., ... } } |
フィールド | |
---|---|
name |
オプションの名前。protobuf 組み込みオプション(descriptor.proto で定義されたオプション)の場合は、省略名になります。たとえば、 |
value |
メッセージにパックされたオプションの値。値がプリミティブの場合は、google/protobuf/wrappers.proto で定義された対応するラッパータイプを使用する必要があります。値が列挙型の場合は、google.protobuf.Int32Value 型を使用して int32 値として格納する必要があります。 任意のデータ型のフィールドを含むオブジェクト。タイプを識別する URI を含む追加フィールド |
SourceContext
SourceContext
は protobuf 要素のソースに関する情報を表します(その定義元のファイルなど)。
JSON 表現 | |
---|---|
{ "fileName": string } |
フィールド | |
---|---|
fileName |
関連付けのある protobuf 要素が含まれていた .proto ファイルのパス修飾名。たとえば |
Mixin
このインターフェースに含まれる API インターフェースを宣言します。含んでいる方のインターフェースでは、含まれているインターフェースのすべてのメソッドを再宣言する必要がありますが、ドキュメントとオプションは次のように継承されます。
コメントと空白文字を取り除いた後、再宣言されたメソッドのドキュメント文字列が空の場合、文字列は元のメソッドから継承されます。
再宣言されたメソッドにないサービス設定(http、公開設定)に属する各アノテーションは継承されます。
http のアノテーションが継承される場合、パスパターンは次のように変更されます。バージョンのプレフィックスはすべて、含んでいる方のインターフェースのバージョンと
root
パス(指定された場合)に置き換えられます。
単純な mixin の例:
package google.acl.v1;
service AccessControl {
// Get the underlying ACL object.
rpc GetAcl(GetAclRequest) returns (Acl) {
option (google.api.http).get = "/v1/{resource=**}:getAcl";
}
}
package google.storage.v2;
service Storage {
// rpc GetAcl(GetAclRequest) returns (Acl);
// Get a data record.
rpc GetData(GetDataRequest) returns (Data) {
option (google.api.http).get = "/v2/{resource=**}";
}
}
mixin 設定の例:
apis:
- name: google.storage.v2.Storage
mixins:
- name: google.acl.v1.AccessControl
mixin 構文は、AccessControl
のすべてのメソッドが Storage
でも同じ名前およびリクエスト タイプ、レスポンス タイプを使用して宣言されることを意味しています。ドキュメント ジェネレータまたはアノテーション プロセッサには、次のとおりにドキュメントとアノテーションを継承した後、有効な Storage.GetAcl
メソッドが表示されます。
service Storage {
// Get the underlying ACL object.
rpc GetAcl(GetAclRequest) returns (Acl) {
option (google.api.http).get = "/v2/{resource=**}:getAcl";
}
...
}
パスパターンのバージョンがどのように v1
から v2
に変わったかに着目してください。
mixin の root
フィールドを指定する場合は、継承された HTTP パスが置かれる相対パスである必要があります。次に例を示します。
apis:
- name: google.storage.v2.Storage
mixins:
- name: google.acl.v1.AccessControl
root: acls
これは、次の継承された HTTP アノテーションを意味します。
service Storage {
// Get the underlying ACL object.
rpc GetAcl(GetAclRequest) returns (Acl) {
option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
}
...
}
JSON 表現 | |
---|---|
{ "name": string, "root": string } |
フィールド | |
---|---|
name |
含まれているインターフェースの完全修飾名。 |
root |
空でない場合、継承された HTTP パスがルート設定されているパスが指定されます。 |