[過去ログ] スレ立てるまでもない質問はここで 158匹目 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
904(2): 2022/02/07(月)11:48 ID:llcouHUw(1) AAS
rest api設計の問題
itemを検索するapi
パス /items
検索パラメータx、y、z
サンプルコード
fetch(baseURL+"/items?x=1&y=hello&z=100")
検索パラメータが全てandで繋がれる場合、あるいは全てorで繋がれる場合は特に問題ないんですが
andとorの両方を組み合わせての検索をサポートしたい時はどのようにapiを設計すべきでしょうか?
パラメータを一つの論理式で表現し、独自のパーサーで解析する方法を考えたのですが
正直、自分でもスマートなやり方に思えませんし、バグを生み出しそうです
/items?q=(x=1 and (y=hello or z=100)
const w = parseQ(queryStr["q"])
const items = db.exec("select * from items where " + buildWhere(w) )
913: 2022/02/07(月)23:40 ID:62pYb9Rs(1) AAS
>>904
パーサーを簡単にしたいなら、
(op,x_1,x_2,x_3,...x_n)
のようなパラメータ列を一つだけパースするようにしてしまう。
opに、andやorなどの演算子名を入れる。
(や)やコンマ,は、URLに入れられないかも知れないから、なんとかする。
また、もっと簡単にしたいなら、
op_3_x1_x2_x3
のように、最初に演算子を書き、二番目に以後の引数の個数を書き、
その後に引き数列を書くようにする。
x1,x2,x3の部分には、先頭の文字がoなら演算子、sなら文字列などのように
してしまうとか。この場合、例えば、
oor_3_oand_2_x_y_sword1_sword2
で、or(and(x,y),word1,word2) を意味する。
914: 2022/02/08(火)08:52 ID:vdYq7JEv(1) AAS
>>904
構文解析をシンプルにしたいなら逆ポーランド記法が定番
ただユーザーがカッコ使って式を入力するようなUIも想定しているなら腹くくって普通の中置記法がいい
いずれにしても電卓向けに構文木を作る構文解析アルゴリズムならサンプルがたくさん見つかるから真似すれば難しくないよ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.043s