diff --git a/google/api/http.proto b/google/api/http.proto index ce07aa14f..0141667ab 100644 --- a/google/api/http.proto +++ b/google/api/http.proto @@ -27,27 +27,100 @@ option java_package = "com.google.api"; // mapping is typically specified as an `google.api.http` annotation, see // "google/api/annotations.proto" for details. // -// The mapping consists of a mandatory field specifying a path template and an +// The mapping consists of a required field specifying a path template and an // optional `body` field specifying what data is represented in the HTTP request -// body. The field name for the path indicates the HTTP method. Example: +// body. The field name for the path indicates the HTTP method. Here is an +// example of a REST API defined using this feature. // // ``` -// package google.storage.v2; +// package example.messaging.v1; // // import "google/api/annotations.proto"; +// import "google/protobuf/empty.proto"; // -// service Storage { -// rpc CreateObject(CreateObjectRequest) returns (Object) { +// service Messaging { +// // Standard List method. +// rpc ListMessages(ListMessagesRequest) returns (ListMessagesResponse) { +// option (google.api.http).get = "/v1/messages"; +// // No body for HTTP GET. +// } +// +// // Standard Create method. +// rpc CreateMessage(CreateMessageRequest) returns (Message) { +// option (google.api.http) = { +// post: "/v1/messages" +// body: "message" +// }; +// } +// +// // Standard Get method. +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}"; +// // No body for HTTP GET. +// } +// +// // Standard Update method. +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// put: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// // Standard Delete method. +// rpc DeleteMessage(DeleteMessageRequest) returns (google.protobuf.Empty) { +// option (google.api.http).delete = "/v1/messages/{message_id}"; +// // No body for HTTP DELETE. +// } +// +// // A custom Forward method. +// rpc ForwardMessage(ForwardMessageRequest) +// returns (ForwardMessageResponse) { // option (google.api.http) { -// post: "/v2/{bucket_name=buckets/*}/objects" -// body: "object" +// post: "/v1/messages/{message_id}:forward" +// body: "*" // }; -// }; +// } +// } +// +// message Message { +// string text = 1; +// } +// +// message ListMessageRequest { +// } +// +// message ListMesageResponse { +// repeated Message messages = 1; +// } +// +// message CreateMessageRequest { +// Message message = 1; +// } +// +// message GetMessageRequest { +// string message_id = 1; +// } +// +// message UpdateMessageRequest { +// string message_id = 1; +// Message message = 2; +// } +// +// message DeleteMessageRequest { +// string message_id = 1; +// } +// +// message ForwardMessageRequest { +// string message_id = 1; +// string forward_address = 2; +// } +// +// message ForwardMessageResponse { // } // ``` // -// Here `bucket_name` and `object` bind to fields of the request message -// `CreateObjectRequest`. +// NOTE: the notation `{message_id}` binds to the field `message_id` in the +// corresponding method's request message. // // The rules for mapping HTTP path, query parameters, and body fields // to the request message are as follows: @@ -76,7 +149,8 @@ option java_package = "com.google.api"; // `LITERAL` a constant. A `Variable` can match an entire path as specified // again by a template; this nested template must not contain further variables. // If no template is given with a variable, it matches a single path component. -// The notation `{var}` is henceforth equivalent to `{var=*}`. +// The notation `{var}` is henceforth equivalent to `{var=*}`. NOTE: the field +// paths in variables and in the `body` must not refer to repeated fields. // // Use CustomHttpPattern to specify any HTTP method that is not included in the // pattern field, such as HEAD, or "*" to leave the HTTP method unspecified for @@ -109,7 +183,7 @@ message HttpRule { // The name of the request field whose value is mapped to the HTTP body, or // `*` for mapping all fields not captured by the path pattern to the HTTP - // body. + // body. NOTE: the referred field must not be a repeated field. string body = 7; // Additional HTTP bindings for the selector. Nested bindings must not