複数のクエリを指定するための webapi (odata 以外) の方法はありますか? シナリオは次のとおりです。 カスタム sproc。2 つの郵便番号を受け取り、距離計算を実行して距離を返します。WebAPI エンドポイントは郵便番号を受け取り、sproc を呼び出します。Distance DTO クラス ZIPDistance { public string Zip1, public string Zip2, public string Distance } を返します。
この URL: "/api/ZipDistances?$select=Distance&$filter=Zip1 eq 13240 and Zip2 eq 90210 ZipDistancesController では、ODataQueryOptions を使用して上記のクエリからパラメーターを抽出し、sproc を呼び出し、上記の DTO を返します。
潜在的なパフォーマンス上の理由から、上記のエンドポイントが郵便番号のペアのコレクション、つまり上記の sproc を呼び出して DTO をループする必要がある郵便番号の「ペア」を表す「ZIPDistance」DTO のコレクションを受け入れることが要求されました。 、sproc を呼び出します。クライアントが複数の呼び出しではなく単一の HTTP 呼び出しを行い、1 回の呼び出しですべての結果を取得できるように、DTO ごとに結果の DTO のコレクションを返します。
私が認識している唯一の方法は、POST を介して、ペイロード内の郵便番号のペアを表す ZIPDistances のコレクションを渡すことですが、これは基本的に REST に反します。なぜなら、POST のセマンティックな意味をデータ取得を意味するように変更するからです (つまり、得る)
問題は、上記のシナリオが WEBAPI でサポートされているかどうか、および動詞の意味を過負荷にして混乱を招くことなく上記を実装するための最良の方法は何かということです。
アップデート:
ここでは、URL にペアを埋め込むことを含む1 つの可能な解決策のプロトタイプを作成しました。
http://<host>/api/ZipDistances?$select=Distance&$filter=Pairs eq 'Zip1 eq 13240 and Zip2 eq 90210,Zip1 eq 13241 and Zip2 eq 90211'
および対応する DTO:
public class ZipDistanceDTO
{
public string ZipPairs { get; set; }
public string Distance { get; set; }
}
これにより、次の結果が返されます。
[{"ZipPairs":"'Zip1 eq 13240 and Zip2 eq 90210","Distance":"558"},
{"ZipPairs":"Zip1 eq 13241 and Zip2 eq 90211'","Distance":"558"}]
これに関するコメント/考えをいただければ幸いです。
更新 (2): Query リソースを使用する別のプロトタイプをここに投稿しました