Compojure-Api возвращает вектор объектов схемы
Я начал изучать фреймворк Luminus, чтобы войти в Clojure(скрипт) для веб-приложений. Для сервисов RESTful Framework предлагает использовать swagger / compojure-api. Примеры были полезны, но я не могу найти ни одного для возврата коллекций.
Вот моя модель:
CREATE TABLE thread
(id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30));
И запрос Конмана:
-- :name get-threads :? :*
-- :doc selects all threads
SELECT * FROM thread
Для сервиса есть схема (она называется Threadd из-за потока Java):
(s/defschema Threadd {:id s/Int
:name s/Str})
Наконец, в сервис-маршрутах (defapi
выражение), простой GET:
(GET "/thread" []
:return Threadd
:summary "All threads"
(ok (db/get-threads)))
Приложение запускается, и Swagger-UI возвращает это по моему запросу (формат edn):
{:errors "(not (map? a-clojure.lang.LazySeq))"}
К сожалению, это не очевидно для меня. Как я могу вернуть несколько объектов с указанной схемой? Могу ли я вернуть их в формате транзит +json?
1 ответ
Вы можете определить другую схему для последовательности потоков:
(s/defschema Threads [Threadd])
и укажите его как тип возврата вашей конечной точки:
(GET "/thread" []
:return Threads
:summary "All threads"
(ok (db/get-threads)))
Вы также можете определить его в строке:
(GET "/thread" []
:return [Threadd]
:summary "All threads"
(ok (db/get-threads)))