2015/07/28

Scala Dispatch 處理Gzip Json

Scala HTTP Client

在開發Scala的專案的時候,當我們需要使用HTTP Client時,有許多不同的選擇:

  • Dispatch — Library for asynchronous HTTP interaction. It provides a Scala vocabulary for Java’sasync-http-client.
  • Netcaty - Simple net test client/server for Netty and Scala lovers.
  • Scalaxb — An XML data-binding tool for Scala that supports W3C XML Schema (xsd) and Web Services Description Language (wsdl) as the input file.
  • Spray — Actor-based library for http interaction.
  • Tubesocks — Library supporting bi-directional communication with websocket servers.
  • scalaj-http – Simple scala wrapper for HttpURLConnection (including OAuth support).
  • Finch.io — Purely Functional REST API atop of Finagle.
  • Newman — A REST DSL that tries to take the best from Dispatch, Finagle and Apache HttpClient. See here for rationale.
我個人在幾個Projects中,是使用Dispatch這個輕量的Asynchronous HTTP Client,並搭配json4s來處理Json。

在Dispatch中如何處理Gzip Encoding?

Dispatch簡單好用也很輕量,但就因為太輕量了,並沒有支援Gzip的處理,今天這篇就來解釋我在使用Dispatch時是怎麼處理Gzip Encoding的。

Gzip Json Response

使用Dispatch,可以透過很簡單的就取得HTTP response的結果:

但若是想handle gzip的response呢?
這邊我們依照as.String的實作方式,寫了一個GzipJson,來判斷回傳的Header中的Content-Encoding是不是Gzip,然後再做相對應的處理:

在使用GzipJson處理Dispatch的response就只要像下面這樣的用方即可:

Gzip Json Request

但是在Request中要傳入Gzip的payload呢?
這邊實作了GzipHelper,並定義implicit function來讓使用上更方便:
實際上傳送gzip的payload方式如下:

參考資料

張貼留言

My World