2017-07-28 10 views
0

通常、バックエンドデータベースで処理されるREST APIで指定されたソートロジックはどのようになっていますか? REST API要求がパラメータをバックエンドデータベースにソート

https://<<some api>>/?sortBy=-id,name 

であると仮定

はカンマで文字列を区切るために、いくつかの正規表現を行うことなく、上記のREST API SortByパラメーターを変換する簡単な方法があり、その後、最初の文字かどうかを確認します以下のSQLリクエストを作成するためのダッシュが含まれていますか?

SELECT * FROM students ORDER BY id ASC, name DESC 

答えて

1

カンマ文字列は次のC#は、例えば、それを行うだろう。..正規表現によって分割する必要はありません区切ら:

string sort = Request["sortBy"]; 
if(sort != null){ 
    foreach(string s in sort.Split(',')){ 
    string direction = "DESC"; 
    if(s[0] == '-') 
     direction = "ASC"; 
    if(permittedColumnsList.Contains(s.Replace("-", "")) 
     sql = sql + s.Replace("-", "") + " " + direction + ","; 
} 
sql = sql.Remove(sql.Length - 1); // drop last comma 

これはまだ、しかし解析して最初のダッシュを探していますあなたが欲しくないようなもの。

あなたはそれを見て単純になる辞書にすべての許容ソートOPSを格納するために用意した場合:

//column dictionary mapping acceptable parameters to the sql that 
//implements them 
colDict["-id"]="id ASC,"; 
colDict["id"]="id DESC,"; 
colDict["-name"]="name ASC,"; 
colDict["name"]="name DESC,"; 

string sort = Request["sortBy"]; 
if(sort != null){ 
    foreach(string s in sort.Split(',')){ 
    if(colDict.ContainsKey(s)) 
     sql = sql + colDict[s]; 
} 
sql = sql.Remove(sql.Length - 1); // drop last comma 

私はこれまでのところ、あなたは物事を単純化するために探しに行くべき存在だと思います。ユーザーがURLに入力したものを盲目的に奪取するのは賢明ではないでしょうし、セキュリティリスクのために - (私が思うにはDESCであると思っています)ASCの後ろに付いているSQLにそれを押し込みます。許可された値の辞書を作成することによって、あなたはそのリスクから自分自身を分離します。辞書はプログラムで構築できるため、クエリスキーマが変更されるたびに手動で変更する必要はありません

関連する問題