api.proto 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. // https://developers.google.com/protocol-buffers/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. syntax = "proto3";
  31. package google.protobuf;
  32. import "google/protobuf/source_context.proto";
  33. import "google/protobuf/type.proto";
  34. option csharp_namespace = "Google.Protobuf.WellKnownTypes";
  35. option java_package = "com.google.protobuf";
  36. option java_outer_classname = "ApiProto";
  37. option java_multiple_files = true;
  38. option java_generate_equals_and_hash = true;
  39. option objc_class_prefix = "GPB";
  40. // Api is a light-weight descriptor for a protocol buffer service.
  41. message Api {
  42. // The fully qualified name of this api, including package name
  43. // followed by the api's simple name.
  44. string name = 1;
  45. // The methods of this api, in unspecified order.
  46. repeated Method methods = 2;
  47. // Any metadata attached to the API.
  48. repeated Option options = 3;
  49. // A version string for this api. If specified, must have the form
  50. // `major-version.minor-version`, as in `1.10`. If the minor version
  51. // is omitted, it defaults to zero. If the entire version field is
  52. // empty, the major version is derived from the package name, as
  53. // outlined below. If the field is not empty, the version in the
  54. // package name will be verified to be consistent with what is
  55. // provided here.
  56. //
  57. // The versioning schema uses [semantic
  58. // versioning](http://semver.org) where the major version number
  59. // indicates a breaking change and the minor version an additive,
  60. // non-breaking change. Both version numbers are signals to users
  61. // what to expect from different versions, and should be carefully
  62. // chosen based on the product plan.
  63. //
  64. // The major version is also reflected in the package name of the
  65. // API, which must end in `v<major-version>`, as in
  66. // `google.feature.v1`. For major versions 0 and 1, the suffix can
  67. // be omitted. Zero major versions must only be used for
  68. // experimental, none-GA apis.
  69. //
  70. //
  71. string version = 4;
  72. // Source context for the protocol buffer service represented by this
  73. // message.
  74. SourceContext source_context = 5;
  75. // Included APIs. See [Mixin][].
  76. repeated Mixin mixins = 6;
  77. // The source syntax of the service.
  78. Syntax syntax = 7;
  79. }
  80. // Method represents a method of an api.
  81. message Method {
  82. // The simple name of this method.
  83. string name = 1;
  84. // A URL of the input message type.
  85. string request_type_url = 2;
  86. // If true, the request is streamed.
  87. bool request_streaming = 3;
  88. // The URL of the output message type.
  89. string response_type_url = 4;
  90. // If true, the response is streamed.
  91. bool response_streaming = 5;
  92. // Any metadata attached to the method.
  93. repeated Option options = 6;
  94. // The source syntax of this method.
  95. Syntax syntax = 7;
  96. }
  97. // Declares an API to be included in this API. The including API must
  98. // redeclare all the methods from the included API, but documentation
  99. // and options are inherited as follows:
  100. //
  101. // - If after comment and whitespace stripping, the documentation
  102. // string of the redeclared method is empty, it will be inherited
  103. // from the original method.
  104. //
  105. // - Each annotation belonging to the service config (http,
  106. // visibility) which is not set in the redeclared method will be
  107. // inherited.
  108. //
  109. // - If an http annotation is inherited, the path pattern will be
  110. // modified as follows. Any version prefix will be replaced by the
  111. // version of the including API plus the [root][] path if specified.
  112. //
  113. // Example of a simple mixin:
  114. //
  115. // package google.acl.v1;
  116. // service AccessControl {
  117. // // Get the underlying ACL object.
  118. // rpc GetAcl(GetAclRequest) returns (Acl) {
  119. // option (google.api.http).get = "/v1/{resource=**}:getAcl";
  120. // }
  121. // }
  122. //
  123. // package google.storage.v2;
  124. // service Storage {
  125. // rpc GetAcl(GetAclRequest) returns (Acl);
  126. //
  127. // // Get a data record.
  128. // rpc GetData(GetDataRequest) returns (Data) {
  129. // option (google.api.http).get = "/v2/{resource=**}";
  130. // }
  131. // }
  132. //
  133. // Example of a mixin configuration:
  134. //
  135. // apis:
  136. // - name: google.storage.v2.Storage
  137. // mixins:
  138. // - name: google.acl.v1.AccessControl
  139. //
  140. // The mixin construct implies that all methods in `AccessControl` are
  141. // also declared with same name and request/response types in
  142. // `Storage`. A documentation generator or annotation processor will
  143. // see the effective `Storage.GetAcl` method after inherting
  144. // documentation and annotations as follows:
  145. //
  146. // service Storage {
  147. // // Get the underlying ACL object.
  148. // rpc GetAcl(GetAclRequest) returns (Acl) {
  149. // option (google.api.http).get = "/v2/{resource=**}:getAcl";
  150. // }
  151. // ...
  152. // }
  153. //
  154. // Note how the version in the path pattern changed from `v1` to `v2`.
  155. //
  156. // If the `root` field in the mixin is specified, it should be a
  157. // relative path under which inherited HTTP paths are placed. Example:
  158. //
  159. // apis:
  160. // - name: google.storage.v2.Storage
  161. // mixins:
  162. // - name: google.acl.v1.AccessControl
  163. // root: acls
  164. //
  165. // This implies the following inherited HTTP annotation:
  166. //
  167. // service Storage {
  168. // // Get the underlying ACL object.
  169. // rpc GetAcl(GetAclRequest) returns (Acl) {
  170. // option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
  171. // }
  172. // ...
  173. // }
  174. message Mixin {
  175. // The fully qualified name of the API which is included.
  176. string name = 1;
  177. // If non-empty specifies a path under which inherited HTTP paths
  178. // are rooted.
  179. string root = 2;
  180. }