2016-10-04 3 views
1

私は、Webアプリケーション用のClojure(スクリプト)に入るためにLuminusフレームワークの学習を開始しました。 RESTfulサービスフレームワークについては、swagger/compojure-apiを使用することを提案します。例は役に立ちましたが、コレクションを返すためのものは見つかりませんでした。ここでCompojure-Apiスキーマオブジェクトのリターンベクトル

は私のモデルである:

CREATE TABLE thread 
(id INTEGER PRIMARY KEY AUTO_INCREMENT, 
name VARCHAR(30)); 

そしてCONMANクエリ:サービスのために

-- :name get-threads :? :* 
-- :doc selects all threads 
SELECT * FROM thread 

スキーマ(それがあるため、JavaのスレッドThreaddと呼ばれている)がある。

(s/defschema Threadd {:id s/Int 
         :name s/Str}) 
は、

最後に、サービスルート(defapi式)では、単純なGET:

(GET "/thread" [] 
     :return  Threadd 
     :summary  "All threads" 
     (ok (db/get-threads))) 

アプリケーションが実行され、闊歩-UIは、私の要求(EDN形式)でこれを返す:

{:errors "(not (map? a-clojure.lang.LazySeq))"} 

残念ながら、これは私のために明らかにされていません。スキーマを指定して複数のオブジェクトを返すにはどうすればよいですか?私はトランジット+ json形式でそれらを返すことができますか?

答えて

2

あなたはa sequence ofスレッドの別のスキーマを定義することができます。

(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))) 
+0

ありがとう、それは働いた!前に[Threadd]オプションを使用しましたが、トランジットライターではエラーが発生していました。ちなみに、Compojure-Apiは 'Accept'ヘッダで指定された形式でデータを返しますか?トランジットライターが必要ですか? – fevgenym

+1

はい、それは必要です(compojure-apiは[README](https://github.com/metosin/compojure-api#compojure-api---)でそれをハイライトします:クライアントの交渉可能な形式:JSON、EDN、YAML&Transit (JSON&MessagePack))。 –

関連する問題