mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 00:11:11 +00:00
fix: OpenAPI :description belongs at Response level, not Media Type
also, support singular :example in addition to :examples
This commit is contained in:
parent
5a811421db
commit
610586f0d3
2 changed files with 14 additions and 14 deletions
|
|
@ -50,8 +50,8 @@
|
||||||
|
|
||||||
["/pizza"
|
["/pizza"
|
||||||
{:get {:summary "Fetch a pizza | Multiple content-types, multiple examples"
|
{:get {:summary "Fetch a pizza | Multiple content-types, multiple examples"
|
||||||
:responses {200 {:content {"application/json" {:description "Fetch a pizza as json"
|
:responses {200 {:description "Fetch a pizza as json or EDN"
|
||||||
:schema [:map
|
:content {"application/json" {:schema [:map
|
||||||
[:color :keyword]
|
[:color :keyword]
|
||||||
[:pineapple :boolean]]
|
[:pineapple :boolean]]
|
||||||
:examples {:white {:description "White pizza with pineapple"
|
:examples {:white {:description "White pizza with pineapple"
|
||||||
|
|
@ -60,8 +60,7 @@
|
||||||
:red {:description "Red pizza"
|
:red {:description "Red pizza"
|
||||||
:value {:color :red
|
:value {:color :red
|
||||||
:pineapple false}}}}
|
:pineapple false}}}}
|
||||||
"application/edn" {:description "Fetch a pizza as edn"
|
"application/edn" {:schema [:map
|
||||||
:schema [:map
|
|
||||||
[:color :keyword]
|
[:color :keyword]
|
||||||
[:pineapple :boolean]]
|
[:pineapple :boolean]]
|
||||||
:examples {:red {:description "Red pizza with pineapple"
|
:examples {:red {:description "Red pizza with pineapple"
|
||||||
|
|
@ -71,20 +70,19 @@
|
||||||
:body {:color :red
|
:body {:color :red
|
||||||
:pineapple true}})}
|
:pineapple true}})}
|
||||||
:post {:summary "Create a pizza | Multiple content-types, multiple examples"
|
:post {:summary "Create a pizza | Multiple content-types, multiple examples"
|
||||||
:request {:content {"application/json" {:description "Create a pizza using json"
|
:request {:description "Create a pizza using json or EDN"
|
||||||
:schema [:map
|
:content {"application/json" {:schema [:map
|
||||||
[:color :keyword]
|
[:color :keyword]
|
||||||
[:pineapple :boolean]]
|
[:pineapple :boolean]]
|
||||||
:examples {:purple {:value {:color :purple
|
:examples {:purple {:value {:color :purple
|
||||||
:pineapple false}}}}
|
:pineapple false}}}}
|
||||||
"application/edn" {:description "Create a pizza using EDN"
|
"application/edn" {:schema [:map
|
||||||
:schema [:map
|
|
||||||
[:color :keyword]
|
[:color :keyword]
|
||||||
[:pineapple :boolean]]
|
[:pineapple :boolean]]
|
||||||
:examples {:purple {:value (pr-str {:color :purple
|
:examples {:purple {:value (pr-str {:color :purple
|
||||||
:pineapple false})}}}}}
|
:pineapple false})}}}}}
|
||||||
:responses {200 {:content {:default {:description "Success"
|
:responses {200 {:description "Success"
|
||||||
:schema [:map [:success :boolean]]
|
:content {:default {:schema [:map [:success :boolean]]
|
||||||
:example {:success true}}}}}
|
:example {:success true}}}}}
|
||||||
:handler (fn [_request]
|
:handler (fn [_request]
|
||||||
{:status 200
|
{:status 200
|
||||||
|
|
@ -114,9 +112,11 @@
|
||||||
:email "heidi@alps.ch"}]})}}]
|
:email "heidi@alps.ch"}]})}}]
|
||||||
|
|
||||||
["/account"
|
["/account"
|
||||||
{:get {:summary "Fetch an account | Recursive schemas using malli registry"
|
{:get {:summary "Fetch an account | Recursive schemas using malli registry, link to external docs"
|
||||||
:parameters {:query #'AccountId}
|
:parameters {:query #'AccountId}
|
||||||
:responses {200 {:content {:default {:schema #'Account}}}}
|
:responses {200 {:content {:default {:schema #'Account}}}}
|
||||||
|
:openapi {:externalDocs {:description "The reitit repository"
|
||||||
|
:url "https://github.com/metosin/reitit"}}
|
||||||
:handler (fn [_request]
|
:handler (fn [_request]
|
||||||
{:status 200
|
{:status 200
|
||||||
:body {:bank "MiniBank"
|
:body {:bank "MiniBank"
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@
|
||||||
->content (fn [data schema]
|
->content (fn [data schema]
|
||||||
(merge
|
(merge
|
||||||
{:schema schema}
|
{:schema schema}
|
||||||
(select-keys data [:description :examples])
|
(select-keys data [:example :examples])
|
||||||
(:openapi data)))
|
(:openapi data)))
|
||||||
->schema-object (fn [model opts]
|
->schema-object (fn [model opts]
|
||||||
(let [result (coercion/-get-model-apidocs
|
(let [result (coercion/-get-model-apidocs
|
||||||
|
|
@ -112,7 +112,7 @@
|
||||||
(select-keys schema [:description])))
|
(select-keys schema [:description])))
|
||||||
(into []))})
|
(into []))})
|
||||||
(when body
|
(when body
|
||||||
;; body uses a single schema to describe every :requestBody
|
;; :body uses a single schema to describe every :requestBody
|
||||||
;; the schema-object transformer should be able to transform into distinct content-types
|
;; the schema-object transformer should be able to transform into distinct content-types
|
||||||
{:requestBody {:content (into {}
|
{:requestBody {:content (into {}
|
||||||
(map (fn [content-type]
|
(map (fn [content-type]
|
||||||
|
|
@ -123,7 +123,7 @@
|
||||||
request-content-types)}})
|
request-content-types)}})
|
||||||
|
|
||||||
(when request
|
(when request
|
||||||
;; request allow to different :requestBody per content-type
|
;; :request allows different :requestBody per content-type
|
||||||
{:requestBody
|
{:requestBody
|
||||||
(merge
|
(merge
|
||||||
(select-keys request [:description])
|
(select-keys request [:description])
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue