Railsのrespond_toと同様に、Compojure /Ringでhtmlとxhr/xml / jsonのリクエストを区別する方法は?
http://apidock.com/rails/ActionController/MimeResponds/respond_to
Railsのrespond_toと同様に、Compojure /Ringでhtmlとxhr/xml / jsonのリクエストを区別する方法は?
http://apidock.com/rails/ActionController/MimeResponds/respond_to
Accept ヘッダーに基づいて明示的に区別したいと仮定し、Ankur の回答に従って適切な応答タイプを単に返すのではなく、次のような独自のディスパッチ関数を作成できます。
(defn dispatch [m]
(let [req (ring-request)
accept (get (:headers req) "accept")
accept? #(re-find (re-pattern (str "^" %)) accept)
key (cond
(accept? "application/json") :json
(accept? "text/html") :html
:else :default)]
((key m))))
そして、そのように呼び出します
(defpage "/foo" []
(dispatch {:json (fn [] "{}")
:html (fn [] "html")
:default (fn [] "default")}))
上記のaccept?
関数は少し原始的ですが、出発点として役立つかもしれません。
Accept Header MIME タイプを処理し、応答マップ データ値を適切な MIME に変換できるリング ミドルウェアを使用する必要があります。
チェックアウト: ring-middleware-format
あなたが参照するドキュメントが言及しているように、
Rails は、クライアントから送信された HTTP Accept ヘッダーから目的の応答形式を決定します。
コードもAccept
ヘッダーを見て、その内容に基づいて何を送信するかを決定できます。これは、リクエスト オブジェクトにインデックスを付けることで取得できます。興味深い質問は、ヘッダーを解析して分解する簡単な方法があるかどうかです。
これに関する情報は、 Is there some Java library for Accept HTTP header parsing?への回答で見つけることができます。.