CrossClj

2.0.0-alpha20 docs

SourceDocs



RECENT

    compojure-api

    Clojars

    May 15, 2018


    OWNER
    Metosin
    Tampere, Helsinki, Finland
    www.metosin.fi

    Readme

    Index of all namespaces


    « Project + dependencies

    Compojure Api

    compojure.api.compojure-compatDocsSource
    Compatibility for older Compojure versions.
    
    compojure.api.impl.jsonDocsSource
    Internal JSON formatting
    
    compojure.api.impl.loggingDocsSource
    Internal Compojure-api logging utility
    

    VARS

    log!

    The README below is fetched from the published project artifact. Some relative links may be broken.

    Compojure-api Build Status Downloads

    Stuff on top of Compojure for making sweet web apis.

    API Docs & Wiki

    Latest version

    Clojars Project

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

    See CHANGELOG for details.

    For information and help

    Read the Version 1.0 Blog Post

    Schema & Spec Coercion with 2.0.0

    Check wiki for documentation

    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 (mention compojure-api or ring-swagger to highlight us).

    Examples

    Hello World Api

    (require '[compojure.api.sweet :refer :all])
    (require '[ring.util.http-response :refer :all])
    
    (def app
      (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/timeout 500))
        (ok {:message (str "Hello, " name)})))
    

    * requires server to be run in async 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/timeout 500))
                       (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 ::name string?)
    (s/def ::message string?)
    
    (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/timeout 500))
                            (ok {:message (str "Hello, " name)})))}}))
    

    Api with Schema & Swagger-docs

    (require '[compojure.api.sweet :refer :all])
    (require '[schema.core :as s])
    
    (s/defschema Pizza
      {:name s/Str
       (s/optional-key :description) s/Str
       :size (s/enum :L :M :S)
       :origin {:country (s/enum :FI :PO)
                :city s/Str}})
    
    (def app
      (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

    https://github.com/metosin/compojure-api/tree/master/examples

    Nice full app: https://github.com/yogthos/memory-hole

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

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

    Quick start for new project

    Clone the examples-repository.

    Use a Leiningen template, with or without tests:

    lein new compojure-api my-api
    lein new compojure-api my-api +midje
    lein new compojure-api my-api +clojure-test
    

    License

    Copyright © 2014-2017 Metosin Oy

    Distributed under the Eclipse Public License, the same as Clojure.