1
0
mirror of https://github.com/actix/actix-website synced 2024-11-27 18:12:57 +01:00
actix-website/content/docs/response.md
Adrian Heine né Lang 7f65e095bb
Linkfix (#271)
2022-05-08 12:03:52 +01:00

3.2 KiB

title menu weight
Responses docs_advanced 210

Response

A builder-like pattern is used to construct an instance of HttpResponse. HttpResponse provides several methods that return a HttpResponseBuilder instance, which implements various convenience methods for building responses.

Check the documentation for type descriptions.

The methods .body, .finish, and .json finalize response creation and return a constructed HttpResponse instance. If this methods is called on the same builder instance multiple times, the builder will panic.

{{< include-example example="responses" file="main.rs" section="builder" >}}

JSON Response

The Json type allows to respond with well-formed JSON data: simply return a value of type Json<T> where T is the type of a structure to serialize into JSON. The type T must implement the Serialize trait from serde.

For the following example to work, you need to add serde to your dependencies in Cargo.toml:

[dependencies]
serde = { version = "1.0", features = ["derive"] }

{{< include-example example="responses" file="json_resp.rs" section="json-resp" >}}

Using the Json type this way instead of calling the .json method on a HttpResponse makes it immediately clear that the function returns JSON and not any other type of response.

Content encoding

Actix Web can automatically compress payloads with the Compress middleware. The following codecs are supported:

  • Brotli
  • Gzip
  • Deflate
  • Identity

{{< include-example example="responses" file="compress.rs" section="compress" >}}

Response payload is compressed based on the encoding parameter from the middleware::BodyEncoding trait. By default, ContentEncoding::Auto is used. If ContentEncoding::Auto is selected, then the compression depends on the request's Accept-Encoding header.

ContentEncoding::Identity can be used to disable compression. If another content encoding is selected, the compression is enforced for that codec.

For example, to enable brotli for a single handler use ContentEncoding::Br:

{{< include-example example="responses" file="brotli.rs" section="brotli" >}}

or for the entire application:

{{< include-example example="responses" file="brotli_two.rs" section="brotli-two" >}}

In this case we explicitly disable content compression by setting content encoding to an Identity value:

{{< include-example example="responses" file="identity.rs" section="identity" >}}

When dealing with an already compressed body (for example when serving assets), set the content encoding to Identity to avoid compressing the already compressed data and set the content-encoding header manually:

{{< include-example example="responses" file="identity_two.rs" section="identity-two" >}}

Also it is possible to set default content encoding on application level, by default ContentEncoding::Auto is used, which implies automatic content compression negotiation.

{{< include-example example="responses" file="auto.rs" section="auto" >}}