首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用reitit clojure定义可选查询参数

如何使用reitit clojure定义可选查询参数
EN

Stack Overflow用户
提问于 2021-08-17 21:20:10
回答 2查看 252关注 0票数 3

我使用以下代码创建了一个API:

代码语言:javascript
复制
   ["/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})))}}]]

这个可以完美地工作。但是,我想使查询参数成为可选的。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 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中的示例,请参阅此文件

票数 2
EN

Stack Overflow用户

发布于 2021-08-18 14:37:27

我不认为这是可以做到的。您可以添加额外的路由:

代码语言:javascript
复制
(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}}]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68824149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档