RPC HTTP¶
Configures the HTTP backend for this call.
Fields | Mandatory | Description |
---|---|---|
method |
❌ No Default: HttpMethod.GET |
HTTP method used for this call |
path | ✅ Yes | Configures the path segment of the URL, i.e. where this call should listen |
params | ❌ No | Configures the parameters segment of the URL |
headers | ❌ No | Configures how HTTP Request headers affect this request |
body | ❌ No | Configures how HTTP request body affect this request |
path
¶
Defines how the message should be parsed from the path.
Function | Description |
---|---|
using(baseContext: String) |
Defines the path prefix, commonly used to define a shared prefix in a call description container |
+"segment" |
Adds a new fixed path segment |
+boundTo(prop) |
binds the value to prop |
params
¶
Defines how the message should be parsed from the URL parameters.
Function | Description |
---|---|
+boundTo(prop) |
Binds to a parameter (called by the exact name of the property) |
headers
¶
Defines how the message should be parsed from the HTTP request headers.
Function | Description |
---|---|
+("Header" to "Value") |
Requires the "Header" to have a fixed value of "Value" |
+"Header" |
Requires the "Header" to be present (any value accepted) |
+boundTo(header: String, prop) |
Binds the header to prop |
Note: When using the boundTo()
function, header values will be serialized and deserialized as Base64. This is done
to ensure that any value can be put into the header safely.
body
¶
Defines how the message should be parsed from the HTTP request body. At the moment this will only read JSON messages.
Function | Description |
---|---|
bindEntireRequestFromBody() |
Reads the full request type via the body |
bindToSubProperty(prop) |
Reads the request body and binds it to a sub-property of the request type |
Examples¶
Example: POST
request with entire request in body
http {
method = HttpMethod.Post
path {
using(baseContext) // baseContext = "/api/avatar"
+"update"
}
body { bindEntireRequestFromBody() }
}
The above RPC will listen on POST /api/avatar/update
.
Example: GET
request with pagination
/*
data class ListActivityByPathRequest(
val path: String,
override val itemsPerPage: Int?,
override val page: Int?
) : WithPaginationRequest
*/
http {
path {
using(baseContext)
+"by-path"
}
params {
+boundTo(ListActivityByPathRequest::itemsPerPage)
+boundTo(ListActivityByPathRequest::page)
+boundTo(ListActivityByPathRequest::path)
}
}
Example: File upload with metadata passed in headers
/*
data class UploadApplicationLogoRequest(
val name: String,
val data: BinaryStream
)
*/
http {
method = HttpMethod.Post
path {
using(baseContext)
+"uploadLogo"
}
headers {
+boundTo("Upload-Name", UploadApplicationLogoRequest::name)
}
body {
bindToSubProperty(UploadApplicationLogoRequest::data)
}
}
Example: Reading parameters from the path segment
/*
data class FindByStringId(val id: String)
*/
http {
method = HttpMethod.Get
path {
using(baseContext)
+"lookup"
+boundTo(FindByStringId::id)
}
}