Pre & post validation. Exceptions to http errors. Logging.
Created by: weipe
lein cljfmt fix har skapat en massa diffar som bara är omstuvning av whitespace.
- Swagger Genom att specificera datatypen på returvärdet för en endpointoperation, så kan Swagger nu visa JSON-schemat för returvärden. Har bara lagt in det på tre endpoints i den publika gruppen än så länge. Datatypen anges med keywordet :return, så här:
(GET "/concept-history-since" []
:query-params ...
:summary "..."
:return show-concept-events-schema
{:body (show-concept-events-since (...
Jag placerade schemadefinitionerna i direkt anslutning till respektive funktion, i fallet ovan direkt i anslutning till definitionen av show-concept-events-since alltså.
- Datavalidering av input och output Specialformerna :pre och :post:
(defn find-concept-by-preferred-term [term]
{:pre [(is (and (not (nil? term)) (> (count term) 0)) "supply a non-empty string argument")]
:post [(is (not (empty? %)) "no such term")]}
(d/q find-concept-by-preferred-term-query (get-db) term))
När en validering misslyckas så kastas ett java.lang.AssertionError. Detta fångar i services.clj och omvandlas till ett http-error:
(def service-routes
(api
{:exceptions
{:handlers
{java.lang.AssertionError (custom-handler response/not-found :error)
(response/not-found representerar 404).
- Loggning Lade in en början till loggning i services.clj m h a clojure.tools.logging.