Ответ rails json с сжатием gzip
У меня есть api, написанный в rails, который по каждому запросу отвечает с ответом JSON.
Ответ может быть огромным, поэтому мне нужно сжать ответ JSON с помощью gzip.
Интересно, как это сделать в контроллере rails?
Я добавил строку
use Rack::Deflater
в config.ru
Должен ли я также что-то менять в строке, которая отображает JSON?
render :json => response.to_json()
Также, как проверить, является ли ответ в формате gzip или нет???
Я сделал запрос на завивание с терминала, я вижу только обычный обычный JSON.
Ответы
Ответ 1
Для ответа в формате gzip нам не нужно менять вызов метода render
.
Если запрос имеет заголовок Accept-Encoding: gzip
, Rails автоматически сжимает ответ JSON с помощью gzip.
Если вы не хотите, чтобы пользователь отправлял запрос с предустановленным заголовком, вы можете добавить заголовок в запрос вручную в контроллере, прежде чем отдать ответ:
request.env['HTTP_ACCEPT_ENCODING'] = 'gzip'
render :json => response.to_json()
Ответ 2
Мой пост Сжатие содержимого с помощью Rack:: Deflater описывает несколько способов интеграции Rack:: Deflater. Самый простой способ - просто обновить config/application.rb
с помощью
module YourApp
class Application < Rails::Application
config.middleware.use Rack::Deflater
end
end
и вы автоматически сжимаете все ответы контроллера с помощью deflate/gzip, если клиент явно говорит, что может обрабатывать его.
Ответ 3
Вы можете запросить Curl, установив собственный заголовок, чтобы получить ответ gzipped
$ curl -H "Accept-Encoding: gzip, deflate" localhost:3000/posts.json > posts_json.gz
затем, затем распакуйте его, чтобы просмотреть фактический ответ json
$ gzip -d posts_json.gz
$ cat posts_json
Если это не работает. назад назад с выходом rake middlewares
, чтобы помочь нам в устранении неполадок.
Ответ 4
В некоторых случаях вы можете рассмотреть возможность записи огромного ответа в файл и gzip:
res = {} # huge data hash
json = res.to_json
Zlib::GzipWriter.open('public/api/huge_data.json.gz') { |gz| gz.write json }
и регулярно обновлять этот файл