-
Notifications
You must be signed in to change notification settings - Fork 147
Description
Library Version(s)
2.0.0-alpha31
Problem
Swagger can display a UI for setting dynamic query parameters, but I can't figure out how to do it with compojure-api.
I have a /find endpoint which needs to receive arbitrary query parameters.
E.g., Given /api/find?x=1&y=2&z=3
I want to receive a map {:x 1, :y 2, :3} somewhere in my handler. The keys are chosen by the requester.
(ns myns (:require [schema.core :as scm]))
(def myapp
(api ...
(GET "/find" [& fields]
:return scm/Any
(ok fields))
This works:
curl 'localhost:8080/api/runs/find?a=1&b=2'
{"a":"1","b":"2"}%
But the Swagger UI does not provide a way to set the query parameters:
I've tried variants of the route, providing
:query [fields scm/Any]
And many other things. I can't seem to find documentation for the arguments to :query
. (Also, does anyone understand what :-
is for?)
If I use a schema that starts with schema.core/maybe
...
(scm/defschema QueryArgs (scm/maybe (scm/cond-pre scm/Num scm/Str scm/Bool scm/Keyword scm/Uuid)))
and provide this to :query...
(GET "/find" [& fields]
:return scm/Any
:query [fields QueryArgs]
(ok))
Swagger at least shows a box that allows me to assign several values inside another parameter, but it's not the one I want:
It produces a URL like this:
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/api/runs/find?schemas=a%3D1&schemas=b%3D2'
But I want
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/api/runs/find?a=1&b=2'