| |
| module ietf-http { |
| |
| |
| namespace "urn:opencord:params:xml:ns:voltha:ietf-http"; |
| prefix http; |
| |
| |
| organization "CORD"; |
| contact |
| " Any name"; |
| |
| description |
| ""; |
| |
| revision "2016-11-15" { |
| description "Initial revision."; |
| reference "reference"; |
| } |
| |
| |
| grouping HttpRule { |
| description |
| "`HttpRule` defines the mapping of an RPC method to one or more HTTP REST API |
| methods. The mapping determines what portions of the request message are |
| populated from the path, query parameters, or body of the HTTP request. The |
| 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 |
| optional `body` field specifying what data is represented in the HTTP request |
| body. The field name for the path indicates the HTTP method. Example: |
| |
| ``` |
| package google.storage.v2; |
| |
| import google api annotations.proto ; |
| |
| service Storage |
| rpc CreateObject(CreateObjectRequest) returns (Object) |
| option (google.api.http) |
| post: v2 bucket_name=buckets objects |
| body: object |
| ; |
| ; |
| |
| ``` |
| |
| Here `bucket_name` and `object` bind to fields of the request message |
| `CreateObjectRequest`. |
| |
| The rules for mapping HTTP path, query parameters, and body fields |
| to the request message are as follows: |
| |
| 1. The `body` field specifies either ` ` or a field path, or is |
| omitted. If omitted, it assumes there is no HTTP body. |
| 2. Leaf fields (recursive expansion of nested messages in the |
| request) can be classified into three types: |
| (a) Matched in the URL template. |
| (b) Covered by body (if body is ` `, everything except (a) fields; |
| else everything under the body field) |
| (c) All other fields. |
| 3. URL query parameters found in the HTTP request are mapped to (c) fields. |
| 4. Any body sent with an HTTP request can contain only (b) fields. |
| |
| The syntax of the path template is as follows: |
| |
| Template = Segments Verb ; |
| Segments = Segment Segment ; |
| Segment = | | LITERAL | Variable ; |
| Variable = FieldPath = Segments ; |
| FieldPath = IDENT . IDENT ; |
| Verb = : LITERAL ; |
| |
| ` ` matches a single path component, ` ` zero or more path components, and |
| `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= `. |
| |
| 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 |
| a given URL path rule. The wild-card rule is useful for services that provide |
| content to Web (HTML) clients."; |
| leaf get { |
| type string; |
| description |
| "Used for listing and getting information about resources."; |
| } |
| |
| leaf put { |
| type string; |
| description |
| "Used for updating a resource."; |
| } |
| |
| leaf post { |
| type string; |
| description |
| "Used for creating a resource."; |
| } |
| |
| leaf delete { |
| type string; |
| description |
| "Used for deleting a resource."; |
| } |
| |
| leaf patch { |
| type string; |
| description |
| "Used for updating a resource."; |
| } |
| |
| container custom { |
| uses CustomHttpPattern; |
| |
| description |
| "Custom pattern is used for defining custom verbs."; |
| } |
| |
| leaf body { |
| type string; |
| description |
| "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."; |
| } |
| |
| list additional_bindings { |
| key "get"; |
| uses HttpRule; |
| |
| description |
| "Additional HTTP bindings for the selector. Nested bindings must not |
| specify a selector and must not contain additional bindings."; |
| } |
| |
| } |
| |
| grouping CustomHttpPattern { |
| description |
| "A custom pattern is used for defining custom HTTP verb."; |
| leaf kind { |
| type string; |
| description |
| "The name of this custom HTTP verb."; |
| } |
| |
| leaf path { |
| type string; |
| description |
| "The path matched by this custom verb."; |
| } |
| |
| } |
| |
| } |