データ検証¶
データ検証は箱を開けてすぐに使用する.あなたの構成には、API管理の各リソースのアーキテクチャ定義が含まれています。挿入/更新するAPIに送信されたデータはアーキテクチャに従って検証され,検証が通過した場合にのみリソースが更新される.
$ curl -d '[{"firstname": "bill", "lastname": "clinton"}, {"firstname": "mitt", "lastname": "romney"}]' -H 'Content-Type: application/json' http://myapi/people
HTTP/1.1 201 OK
応答は、要求内に提供される各項目の成功/エラー状態を含む:
{
"_status": "ERR",
"_error": "Some documents contains errors",
"_items": [
{
"_status": "ERR",
"_issues": {"lastname": "value 'clinton' not unique"}
},
{
"_status": "OK",
}
]
]
上記の例では、第1の文書は検証されていないため、要求全体が拒否される。
すべての文書が検証されて正しく挿入された場合,応答状態は 201 Created
それがそうです。いずれの文書も検証されていない場合、応答状態は 422 Unprocessable Entity
定義された他のエラーコードでも VALIDATION_ERROR_STATUS
配置します。
文書アーキテクチャおよび標準検証ルールをどのように定義するかに関する情報は、参照されたい 構造定義 それがそうです。
拡張データ検証¶
データ検証は Cerberus 検証システムは,したがって拡張可能である.実際,EveのMongoDBデータ層自体にCerberus検証を拡張し,実現した. unique
そして data_relation
制約、すなわち ObjectId
データタイプと decimal128
標準規則の上にある。
検証ルールをカスタマイズする.¶
あなたの特定かつ非常に特殊な用例では,ある値は奇数でしか表現できないと仮定する.新しいのを追加することにしました isodd
規則は私たちの検証案に追加される。以下は、この機能をどのように実施するかです。
from eve.io.mongo import Validator
class MyValidator(Validator):
def _validate_isodd(self, isodd, field, value):
if isodd and not bool(value & 1):
self._error(field, "Value must be an odd number")
app = Eve(validator=MyValidator)
if __name__ == '__main__':
app.run()
Mongoベリファイアベースのサブクラスをサブクラス化することにより、カスタムを追加する _validate_<rulename>
方法の時、あなたは利用可能なものを拡張しました 構造定義 文法は今新しいカスタマイズ規則です isodd
あなたのアーキテクチャで利用できます。今、以下の動作を実行することができます。
'schema': {
'oddity': {
'isodd': True,
'type': 'integer'
}
}
Cerberusとイヴは function-based validation そして type coercion クラスのカスタム検証に基づく軽量代替案である.
カスタムデータタイプ¶
また、以下の内容を簡単に追加することで、新しいデータタイプを追加することができます _validate_type_<typename>
メソッドをサブクラスに追加します。EVEソースコード中の以下のコード片を考慮してください。
def _validate_type_objectid(self, value):
""" Enables validation for `objectid` schema attribute.
:param value: field value.
"""
if isinstance(value, ObjectId):
return True
この手法はMongoDBをサポートしている. ObjectId
以下のことを可能にするアーキテクチャを入力します。
'schema': {
'owner': {
'type': 'objectid',
'required': True,
},
}
確認することもできます source code EVEカスタム検証の場合、実装のようなより高度な用例を見つけることができます unique
そして data_relation
拘束する。
以下の詳細について:
注釈
私たちはデータ検証の毛皮だけに触れた。必ずチェックしてください Cerberus 文書は、利用可能な検証ルールおよびデータタイプの完全リストを取得する。
また、Cerberusはバージョン0.9.2に固定することを要求しており、このバージョンは依然としてサポートされています。 validate_update
使用する方法 PATCH
お願いします。Cerberus 1.0+にアップグレードする計画はEVEバージョン0.8です。
未知の事物を許す¶
一般に、あなたはクライアントがあなたの文書に未知のフィールドを注入することを望んでいません。しかし、場合によってはそうする必要があるかもしれない。たとえば,開発周期において,あるいは非常に異種のデータを扱う場合である.結局,情報の標準化を強制しないことは,MongoDBや他の多くのNoSQLデータ格納の売りの1つである.
イヴでは設定することで ALLOW_UNKNOWN
選択権. True
それがそうです。このオプションを有効にすると、パターンに一致するフィールドは正常に検証され、未知のフィールドは故障なく暗黙に格納される。属性は、ある終端ノードのためにのみこの機能を有効にすることもできます。 allow_unknown
地元のオプションです。
次のドメインを考えてください:
DOMAIN: {
'people': {
'allow_unknown': True,
'schema': {
'firstname': {'type': 'string'},
}
}
}
通常は追加(配布)や編集(パッチ)しかできません firstnames 致す /people
端点.しかしその理由は allow_unknown
有効化されており、このような負荷であっても受け入れられる。
$ curl -d '[{"firstname": "bill", "lastname": "clinton"}, {"firstname": "bill", "age":70}]' -H 'Content-Type: application/json' http://myapi/people
HTTP/1.1 201 OK
ご注意ください
この機能を使うときは特に気をつけなければならない.なお、このオプションを有効にすると、クライアントは実際に adding パッチのフィールド(編集)を通過する.
ALLOW_UNKNOWN
基礎データベース中の文書全体を返す必要がある読み取り専用APIや終端ノードにも有用である.この場合、あなたは検証モデルを使用することを気にしたくない。先ほど設定されたAPI全体について ALLOW_UNKNOWN
至る True
そして、そして schema: {{}}
各端点にあります。個々のサイトについては、ご利用ください allow_unknown: True
代わりに。
構造検証¶
デフォルトでは、中に記録された構造に適合することを保証するためにアーキテクチャが検証されます。 構造定義 それがそうです。
規範に合わないパターンを処理するために、追加してください 検証ルールをカスタマイズする. アーキテクチャで使用される不一致鍵。