inconsistency in resource vs. macro based route definition behaviour
まだ誰も着手していません。
評価
調査の方向性
POST /foo の curl リクエストを再現し、次にマクロベースの route と context/resource 定義を比較します。まず resource route の body パラメータのバリデーションとカスタム text/plain middleware から調査を始めます。両方の route 形式が同じリクエストを一貫して処理し、nil String バリデーションエラーが発生しなければ完了です。
索引モデルが issue の本文から書いたものです。
説明
When making:
curl -X POST \
'http://localhost:7777/foo?rule_name=foo.logic&force_overwrite=true&version=1.1' \
-H 'accept: application/json' \
-H 'cache-control: no-cache' \
-H 'content-type: text/plain' \
-d 'bla'
the following definition behaves correctly:
(POST "/foo" []
:middleware [[muuntaja.middleware/wrap-format
(muuntaja/create
(assoc-in muuntaja/default-options
[:formats "text/plain"] text-plain-format))]]
:query-params [version :- String, rule_name :- String, force_overwrite :- String]
:body [b s/Str]
:return s/Any
(ok
{:ok b})
on other hand this one is failing
(context "/foo" []
(resource {
:post {
:middleware [[muuntaja.middleware/wrap-format
(muuntaja/create
(assoc-in muuntaja/default-options
[:formats "text/plain"] text-plain-format))]]
:parameters {:body-params String
:query-params {:version s/Str
:rule_name s/Str
:force_overwrite s/Str}}
:consumes ["text/plain"]
:responses {http-status/ok {:schema s/Any}}
:handler (fn [{body :body-params {:keys [version rule_name]} :path-params}]
(ok
{:foo body}
))}}))
the error is:
{
"schema": "java.lang.String",
"errors": "(not (instance? java.lang.String nil))",
"type": "compojure.api.exception/request-validation",
"coercion": "schema",
"value": null,
"in": [
"request",
"body-params"
]
}
I use this auxiliary fun:
(def text-plain-format
{:decoder [(fn make-json-decoder [options]
(fn [x ^String charset]
(if (string? x)
x
(slurp (InputStreamReader. ^InputStream x charset)))))]
:encoder [(fn make-json-encoder [options]
(fn [data ^String charset]
(ByteArrayInputStream. (.getBytes data charset))))]})
- 主要言語
- Clojure
- スター
- 1.1k
- フォーク
- 145
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
metosin/compojure-api のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
metosin/compojure-api#489 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
metosin/compojure-api#468 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
metosin/compojure-api#467 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
metosin/compojure-api#464 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
metosin/compojure-api#463 · コメント 3 件 ·
metosin/compojure-api の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
メンテナーはふだん 1 日以内に返信
-
.Needs Triage .Run Repro Bot .Team/UXWest Priority:P3 Type:Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
metabase/metabase#84325 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
NoahTheDuke/splint#56 ·
-
Permissioned transactions fetch each entity once per tx-step, producing huge permission-check queries対応中かも @verveguy が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 半日 初心者へのやさしさ 84/100
clojure-lsp/clojure-lsp#2502 ·
メンテナーはふだん 1 日以内に返信