前回 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 を取ってきているだけなので、このあとあれこれしよう。
プロジェクト全体はこちらにあります。