Attribute Macro spin_macro::http_component
source · #[http_component]
Expand description
The entrypoint to a WASI HTTP component written in Rust.
Functions annotated with this attribute can be of two forms:
- Request/Response
- Input/Output Params
When in doubt prefer the Request/Response variant unless streaming response bodies is something you need.
§Request/Response
This form takes the form of a function with one request
param and one response
return value.
Requests are anything that implements spin_sdk::http::conversions::TryFromIncomingRequest
which includes
spin_sdk::http::Request
, spin_sdk::http::IncomingRequest
, and even hyperium’s popular http
crate’s Request
type.
Responses are anything that implements spin_sdk::http::IntoResponse
. This includes Result<impl IntoResponse, impl IntoResponse
,
spin_sdk::http::Response
, and even the http
crate’s Response
type.
For example:
use spin_sdk::http_component;
use spin_sdk::http::{Request, IntoResponse};
#[http_component]
async fn my_handler(request: Request) -> anyhow::Result<impl IntoResponse> {
// Your logic goes here
}
§Input/Output Params
Input/Output functions allow for streaming HTTP bodies. This form is by its very nature harder to use than the request/response form above so it should only be favored when stream response bodies is desired.
The request
param can be anything that implements spin_sdk::http::TryFromIncomingRequest
. And
the response_out
param must be a spin_sdk::http::ResponseOutparam
. See the docs of ResponseOutparam
for how to use this type.
For example:
use spin_sdk::http_component;
use spin_sdk::http::{IncomingRequest, ResponseOutparam};
#[http_component]
async fn my_handler(request: IncomingRequest, response_out: ResponseOutparam) {
// Your logic goes here
}