PageRenderTime 32ms CodeModel.GetById 28ms app.highlight 3ms RepoModel.GetById 0ms app.codeStats 0ms

/content/posts/gigahorse-030.ja.md

https://github.com/eed3si9n/eed3si9n.com
Markdown | 64 lines | 48 code | 16 blank | 0 comment | 0 complexity | 89260e6e40fa678bf337546cebe24dfa MD5 | raw file
 1---
 2title:       "Gigahorse 0.3.0"
 3type:        story
 4date:        2017-04-27
 5changed:     2021-09-13
 6draft:       false
 7promote:     true
 8sticky:      false
 9url:         /ja/gigahorse-030
10aliases:     [ /node/224 ]
11---
12  [okhttp]: http://square.github.io/okhttp/
13
14Gigahorse 0.3.0 をリリースした。Gigahorse が何かは[ドキュメンテーション](http://eed3si9n.com/gigahorse/ja/)をみてほしい。
15
16### OkHttp サポート
17
180.3.0 は [Square OkHttp][okhttp] サポートを追加する。 Gigahorse-OkHttp は Scala 2.10, 2.11, 2.12 向けにクロスビルドされている。
19
20JavaDoc によると、`OkHttpClient` のインスタンスは close しなくてもいいらしい。
21
22```scala
23scala> import gigahorse._, support.okhttp.Gigahorse
24import gigahorse._
25import support.okhttp.Gigahorse
26
27scala> import scala.concurrent._, duration._
28import scala.concurrent._
29import duration._
30
31scala> val http = Gigahorse.http(Gigahorse.config) // don't have to close
32http: gigahorse.HttpClient = gigahorse.support.okhttp.OkhClient@23b48158
33```
34
35<!--more-->
36
37ただし、レスポンスオブジェクトのボディコンテンツを消費しない場合は**必ず** close する必要がある。
38通常はボディコンテンツは `Gigahorse.asString` などのメソッドで消費される。
39そういう意味では Akka HTTP の設計に似ているかもしれない。
40
41```scala
42scala> val r = Gigahorse.url("http://api.duckduckgo.com").get.
43     |           addQueryString(
44     |             "q" -> "1 + 1",
45     |             "format" -> "json"
46     |           )
47r: gigahorse.Request = Request(http://api.duckduckgo.com, GET, EmptyBody(), Map(), Map(q -> List(1 + 1), format -> List(json)), None, None, None, None, None, None)
48
49scala> val f = http.run(r, { res: FullResponse =>
50     |   res.close() // must close if you don't consume the body
51     |   1
52     | })
53f: scala.concurrent.Future[Int] = Future(<not completed>)
54
55scala> Await.result(f, 120.seconds)
56res0: Int = 1
57```
58
59OkHttp はボディのストリームや Reactive stream のサポートが無いため、それが必要ならば Akka HTTP 版か AHC 版の Gigahorse を使ってほしい。
60
61### Shaded AHC 2.0
62
63Gigahorse は AHC 2.0 をシェーディングするようようになった。
64