2012-02-02 5 views
1

これを読んでいただきありがとうございます。私はStack Overflowを見渡して似たような質問はしませんでしたが、私が1つを逃した場合は謝ります。RESTを使用してオブジェクトの配列をPOSTする標準的なテクニック

私は、REST APIの最初のコンシューマーであるユーザーインターフェースと共に、RESTful APIを構築しています。

私はオブジェクトを作成する必要があります。そのオブジェクトの作成にはかなりの量の設定が必要です。

私は使用する必要がある動詞について理解しています(POST - これを主張しません)と私が必要とするURLのパス。私の質問は、パラメータの設定方法です。不可知論者になるように、私はJSON形式であなたのサンプル設定オブジェクトを与えてみましょう:

{ 
    name: "foo", 
    barid:1, 
    features:[ 
     { 
     id:1, 
     config: { 
      foo:bar, 
      fubar:baz 
     } 
     }, 
     { 
     id:2, 
     config: { 
      foo:bar, 
      fubar:baz 
     } 
     },... 
    ] 
    } 

だから私は思ったんだけど、何が、これがあるの...機能パラメータを投稿する正しい方法は何ですか? JSON文字列を "features"にしてサーバー側で逆シリアル化するだけですか?あなたがRESTfulなPOSTで入れ子になったオブジェクトの配列を構築するために従ういくつかの規則がありますか?他の開発者はこれを消費する必要があるとしている、と私は確かに人々が手-構築するためにjQueryのように見えた私のJSONオブジェクト、で何をしたかしたくない:

features[0][featureid]:2 
features[0][configuration][min]:-64 
features[0][configuration][max]:50 
features[0][include]:true 
features[1][featureid]:3 
features[1][configuration][min]:0 
features[1][configuration][max]:80.5 
features[1][include]:true 

私のGrailsアプリが好きではなかったですそれは非常に:)

もう一度お時間をありがとう。

答えて

2

Grailsはfeatures[0].featured=2&features[0].configuration.min=-64のようなパラメータを受け入れることができますが、実際のマッピングの前に空の構造体とフィーチャ配列を準備する必要があります。それは次のようになります。

import org.apache.commons.collections.ListUtils 
import org.apache.commons.collections.Factory 

class DataCommand { 

    String name 

    List features = = ListUtils.lazyList([], { 
     new FeatureCommand(
      configuration: new ConfigurationCommand() 
    ) 
    } as Factory) 

} 

+

class FeatureCommand { 
    int featured 
    ConfigurationCommand configuration 
} 

class ConfigurationCommand { 
    int min 
    int max 
} 

lazyListは、オンデマンドでリスト要素を作成します。正確な量の特徴を知っているなら、lazyListを使用しないで手動で記入することができます。

Btw、これは、リクエストパラメータではなく、実際のJSONを本体とサーバーにPOST/PUTするのにも適しています。これは、例えばBackboneJSのデフォルトの方法です。そのため、着信JSONを自分で解析し、同じコマンドにマップすることができます(設定はほとんど必要ありません)。

+0

Hey Splix - 私はGrailsについてよく分かりませんでした。私はそれを将来使用する(そして、それを使用するために別のアプリをリファクタリングするかもしれない)が、最終的にGrailsについてではなく、RESTに関する質問を本当にしている。他の人が私のRESTfulなAPIを消費することになるので、私は最小の驚きの原則に基づいて動作し、APIが言語とプラットフォームに関係なく動作することを期待する方法であることを確認します。 – JSager

+0

標準のJSON(POST本体として)を使用することができます。一般的ですが、ほとんどの言語でJSONを使用できるようです。あなたがクエリのパラメータを好むなら、 'features [0] .featured = 2'形式では何の問題もありませんが、それは一般的です(' features [0] [featured]:2'を見たのは初めてです) –

+0

ありがとう。私は今のところJSONの文字列ルートを下っています – JSager

関連する問題