Blog

REST-API Response Compression mit AWS

Warum Komprimierung?

HATEOAS-Payloads (REST Level 3) sind naturgemäß groß – jede Resource trägt ihre Links mit sich. Schon bei mittleren APIs summiert sich das schnell auf mehrere Kilobyte pro Response. Gzip-Komprimierung reduziert das auf 10–30 % der Originalgröße.

Die AWS-Infrastruktur

Client → CloudFront → API Gateway → Lambda

Jede Schicht muss korrekt konfiguriert sein:

API Gateway

Im API-Gateway-Konsolen-Panel unter Integration ResponseContent-Encoding: gzip setzen. Wichtig: das Binary Media Type */* muss aktiviert sein, sonst doppelt API Gateway die Komprimierung.

Lambda (Rust)

use flate2::{write::GzEncoder, Compression};
use std::io::Write;

fn compress(body: &[u8]) -> Vec<u8> {
    let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
    encoder.write_all(body).unwrap();
    encoder.finish().unwrap()
}

CloudFront

CloudFront kann selbst komprimieren – oder die vorkomprimierte Response durchleiten. Letzteres ist effizienter: Compress: false im Behavior, Cache-Control: no-transform im Origin-Header.

Ergebnis

Ein typischer HATEOAS-Response von 8 KB schrumpft auf ~900 Byte. Das ist bei Lambda@Edge besonders relevant, wo jedes KB übertragene Daten abgerechnet wird.