2017-11-02 13 views
0

背景

私はFastifyでAPIを構築しています。これはJSONスキーマの検証を初めて使用しています。サーバーコードをより効率的にし、開発者がAPIをどのように使用するかを学ぶのに役立つという考えがあります。FastifyとAJVによるリクエストスキーマの検証

私は、クライアントが名前だけで子猫を照会することを可能にするルートを検証しようとしている問題

。成功したフォームは/kittens?name=fluffykinsとなります。

{ 
    querystring: { 
    type: 'object', 
    name: { type: 'string' }, 
    } 
} 

質問

どのように私は私のスキーマ・バリはname上のクエリのみを受け入れ、/kittens?age=1のような他のクエリを拒否することができます。このルートの

私のスキーマは、このようになりますか?私の好みは、スキーマバリデーターがコントローラーコードとは無関係にそれを処理し、今後追加する可能性のある照会もサポートすることです。

ありがとうございます!

答えて

1

私がSOに質問を投稿するときの典型的なことは、まもなく私自身が答えを見つけることです。以下は私のために働いたものですが、私はまだこれを行うための他のよりよい方法があるかどうか聞くことに興味があります!

{ 
    querystring: { 
    type: 'object', 
    properties: { 
     name: { type: 'string' } 
    }, 
    anyOf: [ 
     { 
     required: [ 'name' ] 
     } 
    ], 
    }, 
} 
0

(あなたはドラフト-06以降を使用している場合)私はあなたがanyOfでやろうとしているものはかなりよく分からないので、私は何かが欠けているかもしれないが、私は、これはあなたが望むものであると信じて:

{ 
    "type": "object", 
    "required": ["name"], 
    "propertyNames": {"enum": ["name"]}, 
    "properties": { 
     "name": {"type": "string"} 
    } 
} 

propertyNamesnameのみ許容される特性であることを保証します。 "additoinalProperties": falseを代わりに設定することでこれを行うこともできます(ドラフト04を使用している場合は、propertyNamesをサポートしていないため、これを行う必要があります)。しかし、スキーマを結合しようとすると予期しない問題が発生する可能性がありますので、ドラフトを使用できる場合は06 propertyNamesがより柔軟です。ここで

はドラフト-04バージョンです:

{ 
    "type": "object", 
    "required": ["name"], 
    "properties": { 
     "name": {"type": "string"} 
    }, 
    "additionalProperties": false 
} 
関連する問題