昨日はDuctでプロジェクトのセットアップをしました。
今日はataraxy
のルーティングを実装してみます
Ataraxy
Ataraxy
は、ClojureのWebアプリケーション開発においてリクエストのルーティングやレスポンスの管理を簡潔に行うためのライブラリです。
Duct
のプロジェクトをセットアップする際に簡単に追加できます
$ lein new duct example-api +api +ataraxy
ルーティングの実装
プロジェクトを起動すると、プロジェクトの設定が書いてあるconfig.edn
は以下のような状態だと思います
{:duct.profile/base
{:duct.core/project-ns example-api
:duct.router/ataraxy
{:routes {}}}
:duct.profile/dev #duct/include "dev"
:duct.profile/local #duct/include "local"
:duct.profile/prod {}
:duct.module/logging {}
:duct.module.web/api
{}}
この中のルーティングの設定部分は
:duct.router/ataraxy
{:routes {}}
この部分です。
この部分にGET /v1/feeds
というパスを追加してみます
:duct.router/ataraxy
{:routes
{[:get "/v1/feeds"] [:clojure-rss-reader.handler.feeds/get]}}
このように指定してみました。
これは、/v1/feeds
にGETリクエストが来た時に、clojure-rss-reader.handler.feeds/get
というコンポーネントで処理するという設定です。
また、このclojure-rss-reader.handler.feeds/get
というコンポーネントの初期化の設定も必要です
:duct.router/ataraxy
{:routes
{[:get "/v1/feeds"] [:clojure-rss-reader.handler.feeds/get]}}
:clojure-rss-reader.handler.feeds/get {}
これで初期化できました。
これはclojure-rss-reader.handler.feeds/get
というコンポーネントの初期化じに空のマップを渡すという意味です
では、clojure-rss-reader.handler.feeds/get
のコンポーネントを実装してみます
コンポーネントの実装
(ns clojure-rss-reader.handler.feeds
(:require [ataraxy.response :as response]
[integrant.core :as ig]))
(defmethod ig/init-key ::get [_ _]
(fn [_]
[::response/ok {:message "OK"}]))
ここではataraxy.response
とintegrant.core
をインポートしました。
-
ataraxy.response
-
ataraxy
のレスポンスを簡潔に作成するライブラリ
-
-
integrant.core
-
integrant
は、構成をデータとして定義し、管理するライブラリ
-
また、レスポンスに関しては Ataraxy
の一部であるataraxy.response
を用いて実装しました。
これで実際にリクエストを送ってみます
今回はREPLで起動します
$ lein repl
user=> (dev)
:loaded
dev=> (go)
:duct.server.http.jetty/starting-server {:port 3000}
:initiated
(dev)
で開発環境をロードし、
(go)
で起動します
port 3000
で起動したようなので、v1/feeds
にリクエストを送ってみます
$ curl localhost:3000/v1/feeds
{"message":"OK"}
無事レスポンスが返ってきました。
明日はDBに接続していきます