api.proto 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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 objc_class_prefix = "GPB";
  39. option go_package = "google.golang.org/protobuf/types/known/apipb";
  40. // Api is a light-weight descriptor for an API Interface.
  41. //
  42. // Interfaces are also described as "protocol buffer services" in some contexts,
  43. // such as by the "service" keyword in a .proto file, but they are different
  44. // from API Services, which represent a concrete implementation of an interface
  45. // as opposed to simply a description of methods and bindings. They are also
  46. // sometimes simply referred to as "APIs" in other contexts, such as the name of
  47. // this message itself. See https://cloud.google.com/apis/design/glossary for
  48. // detailed terminology.
  49. message Api {
  50. // The fully qualified name of this interface, including package name
  51. // followed by the interface's simple name.
  52. string name = 1;
  53. // The methods of this interface, in unspecified order.
  54. repeated Method methods = 2;
  55. // Any metadata attached to the interface.
  56. repeated Option options = 3;
  57. // A version string for this interface. If specified, must have the form
  58. // `major-version.minor-version`, as in `1.10`. If the minor version is
  59. // omitted, it defaults to zero. If the entire version field is empty, the
  60. // major version is derived from the package name, as outlined below. If the
  61. // field is not empty, the version in the package name will be verified to be
  62. // consistent with what is provided here.
  63. //
  64. // The versioning schema uses [semantic
  65. // versioning](http://semver.org) where the major version number
  66. // indicates a breaking change and the minor version an additive,
  67. // non-breaking change. Both version numbers are signals to users
  68. // what to expect from different versions, and should be carefully
  69. // chosen based on the product plan.
  70. //
  71. // The major version is also reflected in the package name of the
  72. // interface, which must end in `v<major-version>`, as in
  73. // `google.feature.v1`. For major versions 0 and 1, the suffix can
  74. // be omitted. Zero major versions must only be used for
  75. // experimental, non-GA interfaces.
  76. //
  77. //
  78. string version = 4;
  79. // Source context for the protocol buffer service represented by this
  80. // message.
  81. SourceContext source_context = 5;
  82. // Included interfaces. See [Mixin][].
  83. repeated Mixin mixins = 6;
  84. // The source syntax of the service.
  85. Syntax syntax = 7;
  86. }
  87. // Method represents a method of an API interface.
  88. message Method {
  89. // The simple name of this method.
  90. string name = 1;
  91. // A URL of the input message type.
  92. string request_type_url = 2;
  93. // If true, the request is streamed.
  94. bool request_streaming = 3;
  95. // The URL of the output message type.
  96. string response_type_url = 4;
  97. // If true, the response is streamed.
  98. bool response_streaming = 5;
  99. // Any metadata attached to the method.
  100. repeated Option options = 6;
  101. // The source syntax of this method.
  102. Syntax syntax = 7;
  103. }
  104. // Declares an API Interface to be included in this interface. The including
  105. // interface must redeclare all the methods from the included interface, but
  106. // documentation and options are inherited as follows:
  107. //
  108. // - If after comment and whitespace stripping, the documentation
  109. // string of the redeclared method is empty, it will be inherited
  110. // from the original method.
  111. //
  112. // - Each annotation belonging to the service config (http,
  113. // visibility) which is not set in the redeclared method will be
  114. // inherited.
  115. //
  116. // - If an http annotation is inherited, the path pattern will be
  117. // modified as follows. Any version prefix will be replaced by the
  118. // version of the including interface plus the [root][] path if
  119. // specified.
  120. //
  121. // Example of a simple mixin:
  122. //
  123. // package google.acl.v1;
  124. // service AccessControl {
  125. // // Get the underlying ACL object.
  126. // rpc GetAcl(GetAclRequest) returns (Acl) {
  127. // option (google.api.http).get = "/v1/{resource=**}:getAcl";
  128. // }
  129. // }
  130. //
  131. // package google.storage.v2;
  132. // service Storage {
  133. // rpc GetAcl(GetAclRequest) returns (Acl);
  134. //
  135. // // Get a data record.
  136. // rpc GetData(GetDataRequest) returns (Data) {
  137. // option (google.api.http).get = "/v2/{resource=**}";
  138. // }
  139. // }
  140. //
  141. // Example of a mixin configuration:
  142. //
  143. // apis:
  144. // - name: google.storage.v2.Storage
  145. // mixins:
  146. // - name: google.acl.v1.AccessControl
  147. //
  148. // The mixin construct implies that all methods in `AccessControl` are
  149. // also declared with same name and request/response types in
  150. // `Storage`. A documentation generator or annotation processor will
  151. // see the effective `Storage.GetAcl` method after inheriting
  152. // documentation and annotations as follows:
  153. //
  154. // service Storage {
  155. // // Get the underlying ACL object.
  156. // rpc GetAcl(GetAclRequest) returns (Acl) {
  157. // option (google.api.http).get = "/v2/{resource=**}:getAcl";
  158. // }
  159. // ...
  160. // }
  161. //
  162. // Note how the version in the path pattern changed from `v1` to `v2`.
  163. //
  164. // If the `root` field in the mixin is specified, it should be a
  165. // relative path under which inherited HTTP paths are placed. Example:
  166. //
  167. // apis:
  168. // - name: google.storage.v2.Storage
  169. // mixins:
  170. // - name: google.acl.v1.AccessControl
  171. // root: acls
  172. //
  173. // This implies the following inherited HTTP annotation:
  174. //
  175. // service Storage {
  176. // // Get the underlying ACL object.
  177. // rpc GetAcl(GetAclRequest) returns (Acl) {
  178. // option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
  179. // }
  180. // ...
  181. // }
  182. message Mixin {
  183. // The fully qualified name of the interface which is included.
  184. string name = 1;
  185. // If non-empty specifies a path under which inherited HTTP paths
  186. // are rooted.
  187. string root = 2;
  188. }