blob: 3d9cf2c1f701aa18bbfdfca11f261adbd05c39cb [file] [log] [blame]
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.";
}
}
}