From 41c4d78823b1decfdd77359c8588468ddb9ff603 Mon Sep 17 00:00:00 2001 From: Joel Kaasinen Date: Wed, 15 Mar 2023 13:21:14 +0200 Subject: [PATCH] chore: reformat http-swagger example --- examples/http-swagger/src/example/server.clj | 266 +++++++++---------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/examples/http-swagger/src/example/server.clj b/examples/http-swagger/src/example/server.clj index 79bcd15b..c7251d9c 100644 --- a/examples/http-swagger/src/example/server.clj +++ b/examples/http-swagger/src/example/server.clj @@ -39,148 +39,148 @@ (def app (http/ring-handler - (http/router - [["/swagger.json" - {:get {:no-doc true - :swagger {:info {:title "my-api" - :description "swagger-docs with reitit-http" - :version "0.0.1"} - ;; used in /secure APIs below - :securityDefinitions {"auth" {:type :apiKey - :in :header - :name "Example-Api-Key"}}} - :handler (swagger/create-swagger-handler)}}] - ["/openapi.json" - {:get {:no-doc true - :openapi {:info {:title "my-api" - :description "openapi3-docs with reitit-http" - :version "0.0.1"} - ;; used in /secure APIs below - :components {:securitySchemes {"auth" {:type :apiKey - :in :header - :name "Example-Api-Key"}}}} - :handler (openapi/create-openapi-handler)}}] + (http/router + [["/swagger.json" + {:get {:no-doc true + :swagger {:info {:title "my-api" + :description "swagger-docs with reitit-http" + :version "0.0.1"} + ;; used in /secure APIs below + :securityDefinitions {"auth" {:type :apiKey + :in :header + :name "Example-Api-Key"}}} + :handler (swagger/create-swagger-handler)}}] + ["/openapi.json" + {:get {:no-doc true + :openapi {:info {:title "my-api" + :description "openapi3-docs with reitit-http" + :version "0.0.1"} + ;; used in /secure APIs below + :components {:securitySchemes {"auth" {:type :apiKey + :in :header + :name "Example-Api-Key"}}}} + :handler (openapi/create-openapi-handler)}}] - ["/files" - {:tags ["files"]} + ["/files" + {:tags ["files"]} - ["/upload" - {:post {:summary "upload a file" - :parameters {:multipart {:file multipart/temp-file-part}} - :responses {200 {:body {:name string?, :size int?}}} - :handler (fn [{{{:keys [file]} :multipart} :parameters}] - {:status 200 - :body {:name (:filename file) - :size (:size file)}})}}] + ["/upload" + {:post {:summary "upload a file" + :parameters {:multipart {:file multipart/temp-file-part}} + :responses {200 {:body {:name string?, :size int?}}} + :handler (fn [{{{:keys [file]} :multipart} :parameters}] + {:status 200 + :body {:name (:filename file) + :size (:size file)}})}}] - ["/download" - {:get {:summary "downloads a file" - :swagger {:produces ["image/png"]} - :handler (fn [_] + ["/download" + {:get {:summary "downloads a file" + :swagger {:produces ["image/png"]} + :handler (fn [_] + {:status 200 + :headers {"Content-Type" "image/png"} + :body (io/input-stream + (io/resource "reitit.png"))})}}]] + + ["/async" + {:get {:tags ["async"] + :summary "fetches random users asynchronously over the internet" + :parameters {:query (s/keys :req-un [::results] :opt-un [::seed])} + :responses {200 {:body any?}} + :handler (fn [{{{:keys [seed results]} :query} :parameters}] + (d/chain + (aleph/get + "https://randomuser.me/api/" + {:query-params {:seed seed, :results results}}) + :body + (partial m/decode "application/json") + :results + (fn [results] {:status 200 - :headers {"Content-Type" "image/png"} - :body (io/input-stream - (io/resource "reitit.png"))})}}]] + :body results})))}}] - ["/async" - {:get {:tags ["async"] - :summary "fetches random users asynchronously over the internet" - :parameters {:query (s/keys :req-un [::results] :opt-un [::seed])} - :responses {200 {:body any?}} - :handler (fn [{{{:keys [seed results]} :query} :parameters}] - (d/chain - (aleph/get - "https://randomuser.me/api/" - {:query-params {:seed seed, :results results}}) - :body - (partial m/decode "application/json") - :results - (fn [results] - {:status 200 - :body results})))}}] + ["/math" + {:tags ["math"]} - ["/math" - {:tags ["math"]} + ["/plus" + {:get {:summary "plus with data-spec query parameters" + :parameters {:query {:x int?, :y int?}} + :responses {200 {:body {:total pos-int?}}} + :handler (fn [{{{:keys [x y]} :query} :parameters}] + {:status 200 + :body {:total (+ x y)}})} + :post {:summary "plus with data-spec body parameters" + :parameters {:body {:x int?, :y int?}} + :responses {200 {:body {:total int?}}} + :handler (fn [{{{:keys [x y]} :body} :parameters}] + {:status 200 + :body {:total (+ x y)}})}}] - ["/plus" - {:get {:summary "plus with data-spec query parameters" - :parameters {:query {:x int?, :y int?}} - :responses {200 {:body {:total pos-int?}}} - :handler (fn [{{{:keys [x y]} :query} :parameters}] + ["/minus" + {:get {:summary "minus with clojure.spec query parameters" + :parameters {:query (s/keys :req-un [::x ::y])} + :responses {200 {:body (s/keys :req-un [::total])}} + :handler (fn [{{{:keys [x y]} :query} :parameters}] + {:status 200 + :body {:total (- x y)}})} + :post {:summary "minus with clojure.spec body parameters" + :parameters {:body (s/keys :req-un [::x ::y])} + :responses {200 {:body (s/keys :req-un [::total])}} + :handler (fn [{{{:keys [x y]} :body} :parameters}] + {:status 200 + :body {:total (- x y)}})}}]] + ["/secure" + {:tags ["secure"] + :openapi {:security [{"auth" []}]} + :swagger {:security [{"auth" []}]}} + ["/get" + {:get {:summary "endpoint authenticated with a header" + :responses {200 {:body {:secret string?}} + 401 {:body {:error string?}}} + :handler (fn [request] + ;; In a real app authentication would be handled by middleware + (if (= "secret" (get-in request [:headers "example-api-key"])) {:status 200 - :body {:total (+ x y)}})} - :post {:summary "plus with data-spec body parameters" - :parameters {:body {:x int?, :y int?}} - :responses {200 {:body {:total int?}}} - :handler (fn [{{{:keys [x y]} :body} :parameters}] - {:status 200 - :body {:total (+ x y)}})}}] + :body {:secret "I am a marmot"}} + {:status 401 + :body {:error "unauthorized"}}))}}]]] - ["/minus" - {:get {:summary "minus with clojure.spec query parameters" - :parameters {:query (s/keys :req-un [::x ::y])} - :responses {200 {:body (s/keys :req-un [::total])}} - :handler (fn [{{{:keys [x y]} :query} :parameters}] - {:status 200 - :body {:total (- x y)}})} - :post {:summary "minus with clojure.spec body parameters" - :parameters {:body (s/keys :req-un [::x ::y])} - :responses {200 {:body (s/keys :req-un [::total])}} - :handler (fn [{{{:keys [x y]} :body} :parameters}] - {:status 200 - :body {:total (- x y)}})}}]] - ["/secure" - {:tags ["secure"] - :openapi {:security [{"auth" []}]} - :swagger {:security [{"auth" []}]}} - ["/get" - {:get {:summary "endpoint authenticated with a header" - :responses {200 {:body {:secret string?}} - 401 {:body {:error string?}}} - :handler (fn [request] - ;; In a real app authentication would be handled by middleware - (if (= "secret" (get-in request [:headers "example-api-key"])) - {:status 200 - :body {:secret "I am a marmot"}} - {:status 401 - :body {:error "unauthorized"}}))}}]]] - - {;:reitit.interceptor/transform dev/print-context-diffs ;; pretty context diffs - ;;:validate spec/validate ;; enable spec validation for route data - ;;:reitit.spec/wrap spell/closed ;; strict top-level validation - :exception pretty/exception - :data {:coercion reitit.coercion.spec/coercion - :muuntaja m/instance - :interceptors [;; swagger feature - swagger/swagger-feature - ;; openapi feature - openapi/openapi-feature - ;; query-params & form-params - (parameters/parameters-interceptor) - ;; content-negotiation - (muuntaja/format-negotiate-interceptor) - ;; encoding response body - (muuntaja/format-response-interceptor) - ;; exception handling - (exception/exception-interceptor) - ;; decoding request body - (muuntaja/format-request-interceptor) - ;; coercing response bodys - (coercion/coerce-response-interceptor) - ;; coercing request parameters - (coercion/coerce-request-interceptor) - ;; multipart - (multipart/multipart-interceptor)]}}) - (ring/routes - (swagger-ui/create-swagger-ui-handler - {:path "/" - :config {:validatorUrl nil - :urls [{:name "swagger", :url "swagger.json"} - {:name "openapi", :url "openapi.json"}] - :urls.primaryName "openapi" - :operationsSorter "alpha"}}) - (ring/create-default-handler)) - {:executor sieppari/executor})) + {;:reitit.interceptor/transform dev/print-context-diffs ;; pretty context diffs + ;;:validate spec/validate ;; enable spec validation for route data + ;;:reitit.spec/wrap spell/closed ;; strict top-level validation + :exception pretty/exception + :data {:coercion reitit.coercion.spec/coercion + :muuntaja m/instance + :interceptors [;; swagger feature + swagger/swagger-feature + ;; openapi feature + openapi/openapi-feature + ;; query-params & form-params + (parameters/parameters-interceptor) + ;; content-negotiation + (muuntaja/format-negotiate-interceptor) + ;; encoding response body + (muuntaja/format-response-interceptor) + ;; exception handling + (exception/exception-interceptor) + ;; decoding request body + (muuntaja/format-request-interceptor) + ;; coercing response bodys + (coercion/coerce-response-interceptor) + ;; coercing request parameters + (coercion/coerce-request-interceptor) + ;; multipart + (multipart/multipart-interceptor)]}}) + (ring/routes + (swagger-ui/create-swagger-ui-handler + {:path "/" + :config {:validatorUrl nil + :urls [{:name "swagger", :url "swagger.json"} + {:name "openapi", :url "openapi.json"}] + :urls.primaryName "openapi" + :operationsSorter "alpha"}}) + (ring/create-default-handler)) + {:executor sieppari/executor})) (defn start [] (jetty/run-jetty #'app {:port 3000, :join? false, :async true})