Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, but documentation and options are inherited as follows:
- If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method.
- Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited.
- If an http annotation is inherited, the path pattern will be
modified as follows. Any version prefix will be replaced by the
version of the including interface plus the [root][] path if
specified.
Example of a simple 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=}";
}
}
Example of a mixin configuration:
apis:
- name: google.storage.v2.Storage
mixins:
- name: google.acl.v1.AccessControl
The mixin construct implies that all methods in
AccessControlare also declared with same name and request/response types inStorage. A documentation generator or annotation processor will see the effectiveStorage.GetAclmethod after inheriting documentation and annotations as follows: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = "/v2/{resource=**}:getAcl"; } ... } Note how the version in the path pattern changed fromv1tov2. If therootfield in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example: apis:
- name: google.acl.v1.AccessControl
The mixin construct implies that all methods in
- name: google.storage.v2.Storage
mixins:
- name: google.acl.v1.AccessControl root: acls This implies the following inherited HTTP annotation: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; } ... }
- name: google.storage.v2.Storage
mixins:
Generated from protobuf message google.protobuf.Mixin
| Methods |
| public __construct( $data = NULL) Constructor.
|
| public getName() The fully qualified name of the interface which is included. Generated from protobuf field string name = 1;
|
| public getRoot() If non-empty specifies a path under which inherited HTTP paths are rooted. Generated from protobuf field string root = 2;
|
| public setName(string $var) The fully qualified name of the interface which is included. Generated from protobuf field string name = 1;
|
| public setRoot(string $var) If non-empty specifies a path under which inherited HTTP paths are rooted. Generated from protobuf field string root = 2;
|
| Properties |
| protected $name = '' The fully qualified name of the interface which is included. Generated from protobuf field string name = 1; |
| protected $root = '' If non-empty specifies a path under which inherited HTTP paths are rooted. Generated from protobuf field string root = 2; |
| Methods |