我使用以下代码创建了一个API:
["/environments/:env-name/nodes"
{:swagger {:tags ["Nodes"]}
:parameters {:path {:env-name ::vt-vali/name}}}
[""
{:get {:summary "Retrieve the nodes from this environment"
:parameters {:query {:date ::vt-vali/timestamp}}
:responses {200 {:body map?}}
:handler (fn [{{{:keys [env-name]} :path
{:keys [date]} :query} :parameters}]
(let [result (vt-data/ret-nodes env-name date)]
(if (s/valid? map? result)
{:status 200
:body result}
{:status 500
:body result})))}}]]这个可以完美地工作。但是,我想使查询参数成为可选的。
有人能帮我吗?
发布于 2021-08-18 15:27:57
我通过搜索metosin/reitit中的示例找到了答案。
可以使用clojure.spec.alpha。将[clojure.spec.alpha :as s]添加到名称空间的必需依赖项中,您可以使用:
:parameters {:query (s/keys :opt-un [::date])}
有关metosin/reitit http-swagger example中的示例,请参阅此文件
发布于 2021-08-18 14:37:27
我不认为这是可以做到的。您可以添加额外的路由:
(defn handler [{{{:keys [env-name]} :path
{:keys [date]} :query} :parameters}]
(let [result (vt-data/ret-nodes env-name date)]
(if (s/valid? map? result)
{:status 200
:body result}
{:status 500
:body result})))
["/environments/nodes"
{:swagger {:tags ["Nodes"]}
:parameters {:path {:env-name ::vt-vali/name}}}
[""
{:get {:summary "Retrieve the nodes from this environment"
:parameters {:query {:date ::vt-vali/timestamp}}
:responses {200 {:body map?}}
:handler handler}}]
"/environments/:env-name/nodes"
{:swagger {:tags ["Nodes"]}
:parameters {:path {:env-name ::vt-vali/name}}}
[""
{:get {:summary "Retrieve the nodes from this environment"
:parameters {:query {:date ::vt-vali/timestamp}}
:responses {200 {:body map?}}
:handler handler}}]]https://stackoverflow.com/questions/68824149
复制相似问题