0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ひとりカレンダー】ClojureAdvent Calendar 2024

Day 20

Clojure: DuctでRSSリーダーを作る - ルーティング

Last updated at Posted at 2024-12-19

advent_calendar_2024.png

Advent Calendar 2024 Day 20

昨日はDuctでプロジェクトのセットアップをしました。

今日はataraxyのルーティングを実装してみます

Ataraxy

Ataraxyは、ClojureのWebアプリケーション開発においてリクエストのルーティングやレスポンスの管理を簡潔に行うためのライブラリです。

Duct のプロジェクトをセットアップする際に簡単に追加できます

$ lein new duct example-api +api +ataraxy

ルーティングの実装

プロジェクトを起動すると、プロジェクトの設定が書いてあるconfig.ednは以下のような状態だと思います

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のコンポーネントを実装してみます

コンポーネントの実装

handler/feeds.clj
(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.responseintegrant.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に接続していきます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?