内部の質問を解決するのに役立ちます。
私たち全員が同意するエンドポイントがありますする必要があります GETです。これは、ストアドプロシージャを呼び出してデータのセットを返すことだけなので、ただし、エンドポイントに渡す必要がある一連のフィルターがあります。以下は、すべてのフィルターオプションが渡された場合のファイラーの例です。
{
"DistributorCode":"6065",
"Model":"123-xyz",
"Serial":"654654065",
"CurrentSMR":"11350.47",
"SoldbyDistributor":"",
"ServiceDistributor":"",
"LatestSMRDate":"02/12/2020",
"Coverage":"",
"Customer":"",
"CoverageExpirayDate":"",
"SortBy":{
"name" :"serial",
"order":"asc"
},
"select":["eh","wt","fc"]
}
このjson文字列をGET呼び出しのクエリ文字列パラメーターとして渡すか、またはそれぞれを独自のパラメーターにすることができます(ただし、SortByは扱いにくいかもしれません)。
ただし、これによりURLが長くなりすぎて、max query string length
エラー。したがって、代わりにPOSTの呼び出しを行います。POSTの呼び出しの場合は、本文のオブジェクトと少なくとも交渉不可のQSパラメータ(&code =)1つ(存在する必要があります)
したがって、2つのオプションがあります(私が考えることができます)。
パラメータが原因で非常に長いURLになる可能性のあるGET呼び出しにします。
1a)各フィルターは独自のパラメーターです
1b)フィルターのリストはそれ自身のパラメーターのjson文字列です
それをPOST呼び出しにして、QSパラメータと本文のjsonオブジェクトの両方を必要とします
あなたはどちらをしますか、そしてその理由は?
ありがとう!
通常のパラメーターでGETを実行するだけです。あなたは限界に近づいていません。任意のオブジェクトを取得してクエリ文字列に変換できる小さなヘルパー関数を作成したい場合があります。
1bの問題はデバッグが困難です(Webデバッガーでパラメーターを変更するだけで面倒になります)。また、ログは隠されます。 parameterx = Yなどのすべてのインスタンスのアクセスログをフィルタリングする機能が失われます。
2の問題は、キャッシングなどの便利な機能を見逃していることです。
また、GET with bodyは恐ろしいハックです。それをしないでください
あなたの例の配列についても。クエリ文字列は同じパラメーターを複数回サポートするので、?select = eh&select = wt&select = fc
ボディでPOSTを実行するだけです。無制限の配列"select":["eh","wt","fc"]
これは、クエリ文字列パラメーターとしてシリアル化するのが面倒で、URLの長さの制限を超える可能性があります。
また、sprocを破棄し、より多くのオブジェクトを返す単純なメソッドを使用して、フィルターをクライアントに移動することをお勧めします。
これにより、データベースの負荷が軽減され、UIが高速になります
スペルチェックCoverageExpirayDate
この場合、多くの場合、両方の可能性が使用されます。
空でない、またはデフォルト値とは異なるクエリパラメータのみを渡す必要があります。
あなたの例では、クエリ文字列が長くなりすぎてはいけません。したがって、ここではGETエンドポイントで十分です。