github.com/polarismesh/polaris@v1.17.8/common/api/protoc/include/google/protobuf/api.proto (about)

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