lilydocs
HTTP APIWebSocketConsumer
HTTP2 dk okuma

JSON, form ve body

İstek gövdesi için doğru extractor’ı seçin ve tek tüketici kuralını koruyun.

Request gövdesinin sahibi bir body extractor’dır. JSON, form veya stream seçimi; parsing biçimini, memory kullanımını ve action sözleşmesini belirler.

JSON alma#

Json<T> için T: Deserialize DTO kullanın. Content type application/json veya application/*+json olmalıdır. Tam controller örneğinde CreateUser DTO’su bulunur.

Create action parçası
#[post("/")]
async fn create(&self, Json(input): Json<CreateUser>)
    -> Result<Created<UserView>, HttpApiError>
{
    if input.name.trim().is_empty() {
        return Err(HttpApiError::ValidationError("name is required".into()));
    }
    Ok(Created::new("/users/42", UserView { id: 42, name: input.name }))
}
Örnek istek
curl -i http://127.0.0.1:8080/users \
  -H 'Content-Type: application/json' \
  -d '{"name":"Ada"}'

Body türleri#

Extractor Beklenen veri
Json<T> Sınırlandırılmış JSON
Form<T> application/x-www-form-urlencoded
MultipartForm<T> Typed text ve file alanları
RawBody Sınırlandırılmış byte buffer
BodyStream next_chunk ile parça parça okuma

RawBody için gövde yoksa boş buffer alınır; as_bytes veya into_inner ile erişilir. Multipart ayrıntıları file upload sayfasındadır.

Tek body consumer#

Bir action’da JSON ile multipart veya raw body’yi birlikte tüketmeyin. BodyStream terminal ownership alır: sonradan buffered okumaya dönülemez. BodyStream ile &mut Request birlikte kullanılamaz; macro bunu reddeder.

Buffered extractor’dan sonra raw request erişimi mümkün olsa bile yeni, bağımsız ikinci bir body tüketicisi kurulmaz. Özel body extractor son typed parametre olmalıdır.

Boyut ve zaman sınırları#

Parsing, transport’un body sınırları altında gerçekleşir. Varsayılan request body sınırı 16 MiB’dir. Uygulamanıza uygun bir sınırı transport config ile belirleyin. Body okuma da isteğin admission’da başlayan deadline’ına dahildir.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod