前回 Ruby で書いていた Parse の REST API を叩いてみるものを Scala でも書いてみた。 API を叩くときには、アプリケーション ID や REST API キーなるものをリクエストヘッダに設定しないといけない。 なにか簡単な HTTP クライアントはないものかと探したところ、takezoe さんの SimpleHttpClient なるものを見つけたので今回はこれを使ってみる。

sbt で SimpleHttpClient を使えるようにする

Build.scala にプロジェクトのビルド設定を記述する。 依存するライブラリなどを指定する際に、github においてあるコードを git で取得してプロジェクトに取り込めることは知っていた。 今回使いたいのは Mercurial で管理されているコードである。 ちょうど sbt 0.12.0 から Mercurial にも対応したようなので、これを使ってみる。 コードの取得元URIの頭に hg: をつければよいらしい。 こんなかんじに書いてみた

lazy val root = Project(
    ...
    ).dependsOn(takezoe_utils)
    lazy val takezoe_utils = uri("hg:https://bitbucket.org/takezoe/scala-utils")

これで自分のプロジェクトに takezoe さんの scala-utils のコードを取り込んで使うことができるようになった。

SimpleHttpClient を使う

あとは SimpleHttpClient に叩きたい API の URL やらヘッダやらを設定してあげればOKなはず。 以下のようなコードを書いた。 ParseConfig クラスにはアプリケーション ID や REST API のキーがはいっているものと思ってほしい。

 package cc.clv.parse

    import cc.clv.parse.config._
    import jp.sf.amateras.scala.util.Imports._
    import jp.sf.amateras.scala.util.http.SimpleHttpClient

    class Parse(val config: ParseConfig) {
    val parseAPIRoot = "https://api.parse.com"
    val requestHeaders = Map(
    "X-Parse-Application-Id" -> config.appId,
    "X-Parse-REST-API-Key" -> config.restAPIKey,
    "Content-Type" -> "application/json"
    )

    def getObjects(name: String) = {
    using (new SimpleHttpClient){ client =>
    val content: Option[String] = client.get(
    url = parseAPIRoot + "/1/classes/" + name,
    headers = requestHeaders
    )
    content match {
    case Some(s) => s
    case None => None
    }
    }
    }
    }

parse.getObjects("Player") とかすれば Player クラスのデータが取得できる。 とりあえず JSON を取ってきているだけなので、このあとあれこれしよう。

プロジェクト全体はこちらにあります。