Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Sweet web apis with Compojure & Swagger

License

NotificationsYou must be signed in to change notification settings

metosin/compojure-api

Repository files navigation

Psst! If you're starting a new project, why not try outreitit?

Stuff on top ofCompojure for making sweet web apis.

API Docs &Wiki

Latest version

Clojars Project

Latest non-alpha:[metosin/compojure-api "1.1.14"].

SeeCHANGELOG for details.

For information and help

Clojurians slack (join) has a channel#ring-swagger for talk about any libraries using Ring-swagger. You can also ask questions about Compojure-api and Ring-swagger on other channels at Clojurians Slack or at #clojure on Freenode IRC (mentioncompojure-api orring-swagger to highlight us).

Examples

Hello World Api

(require '[compojure.api.sweet:refer:all])(require '[ring.util.http-response:refer:all])(defapp  (api    (GET"/hello" []:query-params [name:- String]      (ok {:message (str"Hello," name)}))))

Hello World, async

(require '[compojure.api.sweet:refer:all])(require '[clojure.core.async:as a])(GET"/hello-async" []:query-params [name:- String]  (a/go    (a/<! (a/timeout500))    (ok {:message (str"Hello," name)})))

* requires server to be run inasync mode

Hello World, async & data-driven

(require '[compojure.api.sweet:refer:all])(require '[clojure.core.async:as a])(require '[schema.core:as s])(context"/hello-async" []  (resource    {:get     {:parameters {:query-params {:name String}}:responses {200 {:schema {:message String}}404 {}500 {:schema s/Any}}:handler (fn [{{:keys [name]}:query-params}]                 (a/go                   (a/<! (a/timeout500))                   (ok {:message (str"Hello," name)})))}}))

* Note that empty body responses can be specified with{} or{:schema s/Any}

Hello World, async, data-driven & clojure.spec

(require '[compojure.api.sweet:refer:all])(require '[clojure.core.async:as a])(require '[clojure.spec.alpha:as s])(s/def::namestring?)(s/def::messagestring?)(context"/hello-async" []  (resource    {:coercion:spec:get {:parameters {:query-params (s/keys:req-un [::name])}:responses {200 {:schema (s/keys:req-un [::message])}}:handler (fn [{{:keys [name]}:query-params}]                      (a/go                        (a/<! (a/timeout500))                        (ok {:message (str"Hello," name)})))}}))

Api with Schema & Swagger-docs

(require '[compojure.api.sweet:refer:all])(require '[schema.core:as s])(s/defschemaPizza  {:name s/Str   (s/optional-key:description) s/Str:size (s/enum:L:M:S):origin {:country (s/enum:FI:PO):city s/Str}})(defapp  (api    {:swagger     {:ui"/api-docs":spec"/swagger.json":data {:info {:title"Sample API":description"Compojure Api example"}:tags [{:name"api",:description"some apis"}]:consumes ["application/json"]:produces ["application/json"]}}}    (context"/api" []:tags ["api"]      (GET"/plus" []:return {:result Long}:query-params [x:- Long, y:- Long]:summary"adds two numbers together"        (ok {:result (+ x y)}))      (POST"/echo" []:return Pizza:body [pizza Pizza]:summary"echoes a Pizza"        (ok pizza)))))

swagger-api

More samples

To try it yourself, clone this repository and do either:

  1. lein run
  2. lein repl &(go)

Quick start for a new project

Use a Leiningen template, with or without tests:

lein new compojure-api my-apilein new compojure-api my-api +midjelein new compojure-api my-api +clojure-test

License

Copyright © 2014-2019Metosin Oy and contributors.

Distributed under the Eclipse Public License, seeLICENSE.


[8]ページ先頭

©2009-2025 Movatter.jp