[clojure]HTTP kitを使ってHTTPサーバとHTTPクライアントを作成

2013.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

HTTP kitとは

HTTP kitとは、ringと互換性がある、Clojure用HTTPクライアント/サーバライブラリです。
このサーバは通常のHTTPサーバとしてだけでなく、WebSocketの/HTTPロングポーリング/ストリーミングのためのAPIも用意しています。
セットアップはLeiningenを使えば簡単に行うことができます。今回は簡単なサーバ/クライアントサンプルを作成してみましょう。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • Clojure : 1.5.1
  • Leiningen : 2.1.2

サンプルを動かす

まずはleinでプロジェクトを作成しましょう。

% lein new mykit

次に、project.cljを変更し、lein depsコマンドで依存ライブラリを取得します。
project.cljは:dependenciesと:mainを記述します。

(defproject mykit "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [http-kit "2.0.0"]]
  :main mykit.core)

HTTPサーバを起動させるための記述をsrc/mykit/core.cljに下記記述を行います。
8080番ポートでアクセスすると、文字列を返すだけの単純なHTTPサーバです。

(ns mykit.core
 (:use [org.httpkit.server :only [run-server]])
 (:require [org.httpkit.client :as kithttp]))

(defn app [req]
  {:status  200
   :headers {"Content-Type" "text/html"}
   :body    "hello HTTP kit!"})

(defn -main [& args]
  (run-server app {:port 8080})
  (println (str "Server started. listen at localhost@8080")))

lein runコマンドでサーバを起動しましょう。ブラウザでhttp://localhost:8080にアクセスすることができるようになります。

% lein run                             
Server started. listen at localhst@8080

次はクライアント用ライブラリを使ってみます。
サーバを起動したままで、別コンソールを起動し、lein replコマンドを入力してREPLを起動しましょう。

% cd /path/your/mykit
% lein repl

get関数をつかってサーバにアクセスしてみます。サーバから結果が返ってきますね。

mykit.core=> (kithttp/get "http://localhost:8080" (fn [{:keys [status headers body error]}] (println body)))
hello HTTP kit!

まとめ

今回はHTTP kitを使用して、単純なHTTPサーバ/クライアントの動作を試してみました。
このライブラリは、Websocketも動かすことができるようなので、いろいろできそうですね。

参考サイトなど