Как включить сжатие для вызова JSON REST в Suave?

Я хочу знать, как вернуть JSON для моих сжатых вызовов REST:

GET /orders HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate

Но документы говорят только о возврате файлов

let setJson it =
    it
    |>JsonUtils.toJson
    |> OK
    >=> setMimeType "application/json; charset=utf-8"

let doReq route request action =
    path route >=> setCORSHeaders >=> request (fun r -> action(r) |> setJson)

doReq "/orders" request (fun r -> queryOrders(r |> getTerm, Products.Name))

person mamcx    schedule 06.07.2018    source источник


Ответы (1)


Я полагаю, что это настраивается в картах типов MIME путем добавления нового типа MIME и передачи true для второго параметра, например:

let mimeTypes =
  defaultMimeTypesMap
    @@ (function | ".json" -> createMimeType "application/json" true | _ -> None)

let webConfig = { defaultConfig with mimeTypesMap = mimeTypes }

Конфигурация типов MIME и сжатия задокументирована на этой странице.

person Aaron M. Eshbach    schedule 06.07.2018
comment
Ты уверен? Я думаю, что сам тип MIME используется для определения того, следует ли применять сжатие. В функции Compression.transform применяется MIN_BYTES_TO_COMPRESS из 500, поэтому, если ваш ответ меньше 500 байт, он никогда не будет сжат. - person Aaron M. Eshbach; 06.07.2018
comment
О, это что. MIN_BYTES_TO_COMPRESS - person mamcx; 06.07.2018