http_component

Attribute Macro http_component 

Source
#[http_component]
Expand description

The entrypoint to an HTTP component.

The component runs in response to inbound HTTP requests that match the component’s trigger.

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
}

See https://spinframework.dev/http-trigger for more information.