compojure-apireturn
を使用すると、スキーマを定義できます。
(s/defschema Pizza
{:name s/Str})
(GET "/pizza/:id" [id]
:return Pizza
:summary "returns a Pizza"
(ok (get-pizza id)))
私の問題は、get-pizza
fn が 404 を返すとき、(リクエスタへの) 応答は、 404 がスキーマ{:status 404 :body {:message "Invalid id provided"}}
と一致しないということです。Pizza
{
"errors": {
"name": "missing-required-key",
"status": "disallowed-key",
"body": "disallowed-key"
}
}
ドキュメントは、複数の応答スキーマを提供できることを示していますが、get-pizza
それらのスキーマを利用するために fn が何を返す必要があるかは不明です。get-pizza
彼らの例では ring-http-response lib を使用して戻り値を生成していますが、私の戻り値 forとring-http-response 'not found' fn の間に違いはありません。
:responses
正直なところ、すべてのコードの重複をすでに予測できるため、可能であれば paramを使用したくありません。:return
スキーマを指定する前は、 get-pizza
fn で 404 を返してリクエスタに正しく渡すことができましたが、スキーマを追加すると、それができなくなりました。戻り値を一般的に定義されたエラーマップにすることを検討:return (s/one Pizza Error)
しましたが、理論上すべての呼び出しが 500 を返す可能性がある場合、すべてのルートに対してError
これを行う理由がわかりません。
注: param の使用に切り替えた理由:return
は、生成された swagger-ui ドキュメントがより見やすく、理解しやすくなるためです。