2017-04-06 10 views
0

私はこの(JSONっぽい形式)のように見えること、私のサービスに対してクエリAPIを持っています。"IS NOT SET"句に適したAPIフォーマットは何でしょうか?

{ 
    filter: { 
      ,attribute2: [val21, val22] 
      ,attribute3: [] 
    } 
} 

は意味(SQLっぽい構文で効果的に、選択したデータWHERE attribute2 in ("val21", "val22") AND attribute3 IS NOT NULLを意味し、返されるオブジェクトは、属性3を持っています私のデータはキー値ストアであり、キーはヌル値ではなく「全く設定されない」かもしれないので、SQLはこれをもちろん表現するのはあまり良くありません)。

IS NOT SETという述語を表現できるようにするには、このAPIを拡張する必要があります。そのためには、どうすればよいかわかりません。

私が考えることのできる唯一のことは、特別な "NOT_SET"という値を要求APIに追加して、NOT SETセマンティクスを生成することです。それは把握することは、本当にklunkyとハードようだ:

API構文は限りその表現/機能としてJSONとして考えることができ

理想的な答えがあることを示すために、APIの設計上のいくつかのよく受け入れられたルールを参照しますそれは良いです"。

{ 
    filter: { 
      ,attribute2: [val21, val22] 
      ,attribute4: [__NOT_SET__] 
    } 
} 
+0

この質問と前の質問では、現在の "JSONish"構造にロックされていますか、それとも変更可能ですか?私は "JSONish"からの変更について尋ねるのではなく、むしろ "JSONish"の形を変えることを求めています。 –

答えて

1

私の提案は、述語フレーズを表すためにキーと値のペアを使用しようとすることから離れることです。あなたは、同様の構造を持つ多くの柔軟性を持っている必要があります。

{ 
    filters: [ 
     { attribute: "attribute2", verb: "IN", values: [val21, val22] }, 
     { attribute: "attribute2", verb: "NOT IN", values: [val21, val22] }, 
     { attribute: "attribute4", verb: "IS NOT SET" }, 
    ] 
} 

あなたはもちろん、動詞の列挙型をしたいと思い、その値はオプションでなければならないであろう。後で必要に応じて動詞を追加することができます。もう貧しい人々にも大きな圧力をかけません。:サポートされている動詞のリストと、使用するタイプの数(存在する場合)の数をクライアントに提供することもできます。クライアントは必要に応じて動的にUIを構築できます。

もちろん、これは大きな変更であり、問​​題である場合もありません。

+0

これを使うことができるかどうかは分かりませんが、APIのデザインはかなり大きく改善されています。 +1 – DVK

+0

@DVK私はそれについてもう少し考えてきました。あなたが壊れた変更を導入することができない場合は、https:/に記載されているように、あなたが得ようとしているものは、 'filters'(暗黙のIN)、' unset_filters:[..] '、' not_in_filters' /stackoverflow.com/questions/43262890/what-would-be-a-good-api-format-for-not-in-clauseうまくいけば、他の誰かが私を間違っていると証明します。 :-( –

+0

私は実際に弾丸を噛んで1つ改善しました:古い「フィルタ」はそのままで、新しい「filters_enhanced」は元の形式と同じような形をしていますが、属性名はマップのキーですベクトルの属性ではなく、サーバー側では、古いフィルターを「IN」述部を持つ新しい形式の拡張フィルターに変換するだけです。 – DVK

関連する問題