2017-10-12 11 views
0

私はrestfullではなく、休憩サービスを持っています。 モジュールはステートレスであり、いくつかの残りのエンドポイントを公開するだけです:要求を受け取り、それを変換し、外部エンドポイントを呼び出してから、Jsonレスポンスを作成します。残り:帯域幅を節約するためにJson応答にファイリングする

応答はかなり冗長で、一部のフィールドはかなり大きいということです。

私は、要求レベルでフィルタリングを提供するように求められました。そのため、応答には要求されたデータのみが含まれています。私の公開されたメソッドはPOSTであり、画像はBASE64エンコード、および応答すぎ、画像、および他の多くの分野を含めることができ受け入れる::ちょうど例を提供するために、

request: { image="<here a long BASE64 encoded request>"} 

response: {result="success", 
    message="it was a success", 
    responseImage="<another base64 encoded image>", 
    longArray1=[ 
     {first="...", second="...", third="..."}, 
     {first="...", second="...", third="..."}, 
     ....many! 
    ], 
    longArray2=[ 
     {first2="...", second2="...", third2="..."}, 
     {first2="...", second2="...", third2="..."}, 
     ....many! 
    ] 
} 

私が欲しいものさ車輪を再構築しないでください。消費者がどのフィールドを応答として受け取るかを事前に選択し、応答の帯域幅を節約できるように、クエリーを作成する既知のパターン(queryStringに、またはJsonリクエストに何かを追加する方法)がありますか?

+0

あなたは、あなたが何をやっているのか、私たちにお伝えください。そうすれば、より良い方法があるかどうかを私たちが簡単に伝えることができます。 – palsrealm

+0

私は、クエリ文字列にいくつかのパラメータ(最大3)を渡しており、応答をフィルタリングするための値を使用しています。私は応答の塗りつぶし、私は1つのパラメータ(フィルタオブジェクト)があり、現在の値が含まれている必要があるかどうかを彼に尋ねるように、フィルタのマップ内で収集するフィルタクラスを実装したいと思います。 – marco

+0

いくつかのフィルタはパラメータレベルで動作する必要があります(レスポンスイメージフィルタのように、イメージはまったくまたはまったくありません)。また、配列の値レベルで他のフィルタが動作する必要があります(たとえば、longArray1のフィルタがFAILED_ONLYの場合、 "私はアイテムを表示する必要があります、それは"合格 "私はそれを非表示にする必要があります)。 – marco

答えて

0

Filterクラスを持つというアイデアは良いことです。 Filterクラスはレスポンスオブジェクトを反映するフィールドを提供し、提供されていないフィールドにはデフォルトを使用します。例えば。あなたのapiのユーザーがjsonのシリアライズされたフィルターオブジェクトをリクエストで渡さない場合でも、デフォルトのフィルターでデータを受け取る必要があります。あなたの例を拡大すると、要求は次のようになります

request: { 
    image="<here a long BASE64 encoded request>", 
    requestFilters:{ 
    responseImage="<another base64 encoded image>", 
    longArray1={ firstFilter:"PASSED_ONLY", 
      secondFilter:"FAILED_ONLY",    
      ....many! 
     }, 
    longArray2={ // using defaults for firstFilter and secondFilter 
      thirdFilter="PASSED", 
      fourthFilter="FAILED", 
      ....many! 
     } 
    ...... 
    } 
} 

+0

ありがとう、私は何か似たようなことをしましたが、私はオプションのクエリ文字列と一緒に行くことに決めました。リクエスト(Json形式、必須)とフィルタ、オプションのクエリ文字列。 – marco