配置¶
通常,EVE構成はプロファイルを用いて行うことが望ましい.プロファイル自体が実際のPythonファイルです。しかし,EVEはまず辞書ベースの設定を優先し,入力された文書の検索を試みる EVE_SETTINGS
環境変数(設定すれば)は、最後に位置を特定しようとします settings.py ファイル名が渡されたファイル settings 構造関数中のフラグ.
ファイルを用いて構成する¶
起動時に settings 構造関数ではフラグが省略されており,イヴは名前を位置づけることを試みる settings.py まず、アプリケーションフォルダに格納され、その後、アプリケーションの1つのサブフォルダに格納される。アプリケーションをインスタンス化する際にパラメータとして渡すだけで、別のファイル名/パスを選択することができます。ファイルパスが相対パスである場合、イヴは再帰的にあなたの sys.path したがって、あなたはアプリケーションルートをそれの後に追加することを確実にしなければならない。たとえば,設定ファイルが必ずしもアプリケーションのルートディレクトリにあるとは限らない場合,これはテスト環境において有用である.
from eve import Eve
app = Eve(settings='my_settings.py')
app.run()
辞書を用いて配置する¶
あるいは、設定辞書を提供することも選択できます。設定ファイル構成Eveを使用するのとは異なり、辞書ベースの方法は、すべての設定をカバーすることなく、ご自身の値を使用してイヴのデフォルト設定を更新するだけです。
from eve import Eve
my_settings = {
'MONGO_HOST': 'localhost',
'MONGO_PORT': 27017,
'MONGO_DBNAME': 'the_db_name',
'DOMAIN': {'contacts': {}}
}
app = Eve(settings=my_settings)
app.run()
開発·生産¶
ほとんどのアプリケーションは複数の構成を必要とする.生産サーバと開発期間中に使用するサーバは少なくとも異なる構成であるべきである.この問題に対処する最も簡単な方法は,つねにロードされているデフォルト構成およびバージョン制御の一部を使用することと,必要に応じてこれらの値をカバーする個別構成を用いることである.
これがファイルコンテンツを使用して設定を上書きまたは拡張することができる主な理由です。 EVE_SETTINGS
環境変数指向.開発/ローカル設定は、ストレージに格納することができます settings.py そして、生産では、EVE_SETTINGS=/PATH/を/Production_setting.pyに導出することができます。
しかし、開発/生産を処理する多くの代替方法がある。Pythonモジュールを使用して構成することは非常に便利です。ローカルおよび生産システム上で同じAPIをシームレスに起動し、必要に応じて適切なデータベースインスタンスに接続することができるなど、様々なテクニックを使用することができます。以下の例を考える.
# We want to run seamlessly our API both locally and on Heroku, so:
if os.environ.get('PORT'):
# We're hosted on Heroku! Use the MongoHQ sandbox as our backend.
MONGO_HOST = 'alex.mongohq.com'
MONGO_PORT = 10047
MONGO_USERNAME = '<user>'
MONGO_PASSWORD = '<pw>'
MONGO_DBNAME = '<dbname>'
else:
# Running on local machine. Let's just use the local mongod instance.
# Please note that MONGO_HOST and MONGO_PORT could very well be left
# out as they already default to a bare bones local 'mongod' instance.
MONGO_HOST = 'localhost'
MONGO_PORT = 27017
MONGO_USERNAME = 'user'
MONGO_PASSWORD = 'user'
MONGO_DBNAME = 'apitest'
全体構成.¶
従来のAPIアクションを定義することに加えて、多くのグローバル構成設定は、標準エンドポイントルールセットを定義するために使用され、単一のエンドポイントを後で構成する際に微調整することができる。グローバル配置はつねに大文字に設定されている.
|
すべてのAPIサイトのURLプレフィックス.将と |
|
APIバージョン。将と |
|
フィルタリング可能なフィールドリスト。このリスト内のエントリは階層的に動作します。つまりフィルタリングは 注意してください。 APIキャプチャやDB DoS攻撃が懸念される場合,フィルタをグローバルに無効にし,ローカルレベルの有効なフィルタをホワイトリストに登録することができる. |
|
リソースアーキテクチャに基づいてフィルタを検証するかどうかを検証する.無効なフィルターは異常を引き起こすだろう。黙認する. 警告:カスタムルールやタイプを持つフィールドに関するフィルタ式の検証は,性能に大きな影響を与える可能性がある.例えばこのような状況です |
|
|
|
|
|
QUERY_MAX_RESULTSクエリーパラメータの許容最大値。この制約を超えた値はこの値に暗黙的に置き換えられる.あなたは性能と伝送サイズの間で合理的なトレードオフを達成することを望んでいる。デフォルトは50です。 |
|
QUERY_MAX_RESULTSのデフォルト値です。デフォルトは25である. |
|
これを |
|
フィルタはパラメータのキーを問い合わせる.黙認する. |
|
クエリーパラメータをソートするキー.黙認する. |
|
Projectionsクエリーパラメータの鍵.黙認する. |
|
Pages問合せパラメータの鍵.黙認する. |
|
最大結果問合せパラメータの鍵.黙認する. |
|
クエリーパラメータのキーを埋め込む.黙認する. |
|
クエリーパラメータのキーを集約する.黙認する. |
|
日時値を解析して提示するためのPython日付フォーマット。サービス要求時には,一致したJSON文字列が解析されて格納される. |
|
資源終端ノードがサポートするHTTPメソッドリスト.許容値: |
|
リソース終端ノードがサポートするHTTPメソッドリストは、 認証と権限 有効になりました。リソース設定でカバーすることができます。黙認する. |
|
項終点がサポートするHTTPメソッドリスト.許容値: |
|
項終端がサポートするHTTPメソッドリストは,以下の場合に共通アクセス可能である. 認証と権限 有効になりました。リソース設定でカバーすることができます。黙認する. |
|
許容リスト roles リソースエンドポイントに用いられる.リソース設定でカバーすることができます。見 認証と権限 より多くの情報を得ることができます黙認する. |
|
許容リスト roles GETおよびOPTIONSメソッドを有するリソース終端ノードのための。リソース設定でカバーすることができます。見 認証と権限 より多くの情報を得ることができます黙認する. |
|
許容リスト roles POST,PUT,DELETEメソッドを持つリソースエンドノードに対して.リソース設定でカバーすることができます。見 認証と権限 より多くの情報を得ることができます黙認する. |
|
許容リスト roles プロジェクト最終ノードに使用します。見 認証と権限 より多くの情報を得ることができますリソース設定でカバーすることができます。黙認する. |
|
許容リスト roles GetおよびOptions手法を持つ項終端ノードのための.見 認証と権限 より多くの情報を得ることができますリソース設定でカバーすることができます。黙認する. |
|
許容リスト roles PUT,PATCH,DELETE手法を持つ項終端ノードのための.見 認証と権限 より多くの情報を得ることができますリソース設定でカバーすることができます。黙認する. |
|
グローバル·ヘッダを使用して送信された方法の可能性を有効/無効にする |
|
の価値 |
|
の値(秒単位)である. |
|
CORS(ドメイン間資源共有)サポート。API保守担当者は、どのドメインがCORS要求を実行することを許可するかを指定することができる許容値は、以下のことを含む。 |
|
同じ設定と |
|
CORS(ドメイン間資源共有)サポート。API保守者は、CORS要求と共に送信を許可するヘッダを指定することを許可する。許容値は、以下のことを含む。 |
|
CORS(ドメイン間資源共有)サポート。API保守担当者は、CORS応答においてどのヘッダを開示するかを指定することを可能にする。許容値は、以下のことを含む。 |
|
CORS(ドメイン間資源共有)サポート。API保守担当者は、クライアントがCookieを送信できるかどうかを指定することができる。唯一許容される値は |
|
CORS(ドメイン間資源共有)サポート。アクセス制御許可ヘッダの最長期限の設定を許可します。デフォルトは21600です。 |
|
文書の最後の更新日を記録するためのフィールドの名前。このフィールドはEveによって自動的に処理される.黙認する. |
|
文書作成日を記録するためのフィールドの名前。このフィールドはEveによって自動的に処理される.黙認する. |
|
データベース内のリソース項目を一意に識別するためのフィールドの名前。このフィールドをデータベースに正しくインデックスしたいです。リソース設定でカバーすることができます。黙認する. |
|
|
|
リソースエントリを検索する際に使用される文書フィールド。リソース設定でカバーすることができます。黙認する. |
|
デフォルト項目終端ノードURLを構築するためのURLルール.リソース設定でカバーすることができます。デフォルト値. |
|
XMLとJSONレスポンスに項参照を構築する際に用いるヘッダ.デフォルトでは資源名は,複数‘s’が存在すれば削除する.単一のリソースエンドポイントを構成する際に、カバーされる可能性が高い。 |
|
使 ユーザ制限されたリソースアクセス それがそうです。この機能を有効にすると、ユーザは自分が作成したリソース項目を読み取り/更新/削除することしかできません。キーワードは、リソース項目を作成するユーザIDを格納するためのフィールドの実際の名前を含む。リソース設定でカバーすることができます。黙認する. |
|
いつ? |
|
いつ? |
|
いつ? |
|
いつ? |
|
各POST応答と共に提供されるべき追加の文書フィールドリストを構成することを可能にする。通常はフィールドのみを自動処理します ( |
|
GET要求のレート制限を表すタプル.タプルの第1の要素は許容される要求数であり、第2の要素は秒単位の時間ウィンドウである。例えば |
|
POST要求レート制限のタプルを表す.タプルの第1の要素は許容される要求数であり、第2の要素は秒単位の時間ウィンドウである。例えば |
|
パッチ要求のレート制限を表すタプル.タプルの第1の要素は許容される要求数であり、第2の要素は秒単位の時間ウィンドウである。例えば |
|
削除要求のレート制限を表すタプル.タプルの第1の要素は許容される要求数であり、第2の要素は秒単位の時間ウィンドウである。例えば |
|
|
|
ERROR_CODEフィールドのカスタムを許可します。黙認する. |
|
いつ? |
|
問題フィールドをカスタマイズすることを可能にする。黙認する. |
|
カスタムステータスフィールドを許可します。黙認する. |
|
データ検証に成功したときに返される状態メッセージ.黙認する. |
|
データ検証に失敗した場合は状態メッセージを返す.黙認する. |
|
カスタムアイテムフィールドを許可します。黙認する. |
|
カスタムメタフィールドを許可します。黙認する. |
|
文字列値は、EVEホームページ上の所定の情報名を有する情報部(提案値)を含むためのものである |
|
カスタムリンクフィールドを許可します。黙認する. |
|
Etagフィールドのカスタムを許可します。黙認する. |
|
|
|
|
|
有効なレンダラーの変更を許可します。黙認する. |
|
|
|
サポートされているJSONコンテンツタイプです。サプライヤー固有のJSONタイプをサポートする必要がある場合には非常に有用である。注意してください:返事はまだ基準に従います |
|
エラーを検証するためのHTTPステータスコード.黙認する. |
|
以下の場合、ドキュメントバージョン制御を有効にする |
|
主格納セット名に接尾辞を追加して、文書バージョンを格納するためのシルエット格納セット名を作成する。黙認する. |
|
文書の特定のバージョンにアクセスするためのURL照会パラメータ。黙認する. |
|
文書バージョン番号を格納するためのフィールド。黙認する. |
|
文書の最新バージョン番号を格納するためのフィールド。黙認する. |
|
シャドウセットには文書IDを格納するために用いられる.黙認する. |
|
A MongoDB URI これは他の配置変数よりも優先的に使用される. |
|
MongoDBサーバアドレス。黙認する. |
|
MongoDBポートです。黙認する. |
|
MongoDBユーザ名。 |
|
MongoDBパスワードです。 |
|
MongoDBデータベース名。 |
|
MongoClientクラスに渡すMongoDBキーワードパラメータ |
|
MongoDB許可データベース。黙認する. |
|
MongoDB認証機構.見 PyMongo Authentication Mechanisms それがそうです。黙認する. |
|
必要であれば,MongoDBの追加的な認証機構属性を指定する.黙認する. |
|
リソースフィルタでの使用が許可されていないMongo問合せオペレータのリスト ( デフォルトでは、攻撃を注入するためのキャリアとして使用される可能性があるため、Mongo JavaScriptオペレータを無効にします。JavaScript問合せも遅いことが多く,通常は(非常に豊富な)Mongo問合せ方言に容易に置き換えることができる. |
|
公式に許可されたオペレータリストに加えて、追加のMongo問合せオペレータのリストが許可されます。黙認する. 終端ノード(Mongo集合)レベルでカバーすることができる.見 |
|
MongoDB書き込み注目点設定の辞書を定義する.すべての標準書き込み操作設定(w,wtimeout,j,fsync)をサポートします。黙認する. ‘w’を2以上に設定するにはコピーをアクティブにする必要があり、そうでなければ500個のエラーが受信されます(書き込みはまだ発生します;Mongoは複数のサーバに書き込まれているかどうかをチェックすることができません)ことに注意してください。 終端ノード(Mongo集合)レベルでカバーすることができる.見 |
|
APIドメイン定義の辞書を保存する.見 Domain Configuration それがそうです。 |
|
ファイルアップロードドライバから転送される属性リスト。 |
|
エンドノード応答へのメディアタイプの埋め込みを制御する.カスタムFlaskエンドポイントのようなバイナリファイルを取得する他の方法がありますが、クライアントがそれを発行/修復することを望む場合には有用です。黙認する. |
|
とする. |
|
以下の場合に使用する基本URL |
|
以下の場合に使用するメディア終端点 |
|
専用メディアエンドポイントで提供されるファイルURLのフォーマット。黙認する. |
|
もし資源を |
|
もし設定が これと一緒に使うと 黙認する. |
|
提出非 黙認する. |
|
とする. |
|
これはデータベース集合の名前です 操作日誌 保存されています黙認する. |
|
どのような動作を記録すべきHTTPメソッドリスト 操作日誌 それがそうです。黙認する. |
|
HTTPメソッドリスト,これらの操作にはペアが含まれる. 操作日誌 入る。黙認する. |
|
の名称 操作日誌 端点.このエンドポイントが有効であれば、任意の他のAPIエンドポイントを構成するように構成することができる。とする. |
|
とする. |
|
有効な場合、オプションの |
|
の名称 構造最終ノード それがそうです。黙認する. |
|
収集のための応答ペイロード中のアイテム総数を含むカスタムヘッダ |
|
要求にパラメータが設定されている場合、このオプションは、JavaScript関数呼び出しに応答パッケージをもたらす。例えば設定すれば |
|
設定時に大容量挿入を有効にする |
|
設定時にソフト削除を有効にする |
|
以下の場合に文書が削除されたか否かを示すフィールド名 |
|
リソースレベル取得応答にソフト削除項目を含むためのURL照会パラメータ。デフォルトでは‘show_delete’とする. |
|
これは,標準的なAPI応答を提供するHTTPエラーコードリストである.仕様のエラー応答は、実際のエラーコードおよび記述を有するJSON本体を含む。仕様応答を完全に無効にする場合は、空リストに設定してください。黙認する. |
|
もし |
|
|
|
もし |
|
もし |
|
もし |
ドメイン構成¶
EVE用語では domain API構造の定義であり,APIを設計し,資源終端点を微調整し,検証ルールを定義する領域である.
DOMAIN
これは global configuration setting :キーがAPIリソースであり、その定義に代入されるPython辞書。
# Here we define two API endpoints, 'people' and 'works', leaving their
# definitions empty.
DOMAIN = {
'people': {},
'works': {},
}
次の2つの部分ではカスタマイズします people 資源です。
リソース/プロジェクト最終ノード¶
エンドポイントのカスタマイズは主にいくつかをカバーすることで global settings しかし、他の独特な設定も利用可能です。資源設定はつねに小文字である.
|
終端URL。省略すれば また、正規表現を使用してサブリソースと同様のエンドポイントを設定することができます。見 サブ資源. それがそうです。 |
|
フィルタリング可能なフィールドリスト。このリスト内のエントリは階層的に動作します。つまりフィルタリングは 注意してください。 API捕捉またはDB DoS攻撃が懸念される場合、グローバル無効フィルタ(参照) |
|
|
|
|
|
資源終端ノードがサポートするHTTPメソッドリスト.許容値: 注意してください。 バージョン0.0.5以上のバージョンを実行している場合は、現在サポートされていないものをご利用ください |
|
リソース終端ノードがサポートするHTTPメソッドリストは、 認証と権限 有効になりました。ローカルカバー. |
|
項終点がサポートするHTTPメソッドリスト.許容値: |
|
項終点がサポートするHTTPメソッドリストは,以下の場合に公開された公開アクセスを保持する. 認証と権限 有効になりました。ローカルカバー. |
|
許容リスト roles リソースエンドノードに用いられています見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
許容リスト roles GETおよびOPTIONSメソッドを有するリソース終端ノードのための。見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
許容リスト roles POST付き資源端点に対しては,PUTとDELETEである.見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
許容リスト roles GetとOptions手法を持つ項終端ノードに対して.見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
許容リスト roles PUT,PATH,DELETEメソッドを持つ項終端ノードに対して.見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
許容リスト roles プロジェクト最終ノードに使用します。見 認証と権限 より多くの情報を得ることができますローカルカバー. |
|
の価値 |
|
の値(秒単位)である. |
|
データベース内のリソース項目を一意に識別するためのフィールド。ローカルカバー. |
|
|
|
リソースエントリを探す際に使用されるフィールド。ローカルカバー. |
|
項終端URLを構造するためのルール.ローカルカバー. |
|
資源リンクを構築する際に用いるヘッダ(HATEOAS).デフォルト資源の |
|
XMLとJSONレスポンスに項参照を構築する際に用いるヘッダ.覆う |
|
デフォルトの標準項終端点を除いて |
|
APIリソースをデータベースセットに明示的にリンクする.見 Advanced Datasource Patterns それがそうです。 |
|
使 ユーザ制限されたリソースアクセス それがそうです。この機能を有効にすると、ユーザは自分が作成したリソース項目を読み取り/更新/削除することしかできません。キーワードは、リソース項目を作成するユーザIDを格納するためのフィールドの実際の名前を含む。ローカルカバー. |
|
いつ? |
|
いつ? |
|
いつ? |
|
各POST応答と共に提供されるべき追加の文書フィールドリストを構成することを可能にする。通常はフィールドのみを自動処理します ( |
|
いつ? |
|
公式に許可されたオペレータリストに加えて、このエンドポイントで使用される追加のMongoクエリ識別子のリストを許可します。黙認する. |
|
端点のデータソースを定義するMongoDBは注目セットの辞書を書く.すべての標準書き込み操作設定(w,wtimeout,j,fsync)をサポートします。黙認する. ‘w’を2以上に設定するにはコピーをアクティブにする必要があり、そうでなければ500個のエラーが受信されます(書き込みはまだ発生します;Mongoは複数のサーバに書き込まれているかどうかをチェックすることができません)ことに注意してください。 |
|
デフォルト設定の上書きを可能にする 例えばもし これは、最終的に、異なるデータベース/サーバからのデータを各エンドポイントで提供することを可能にする。 また会いましょう 認証ドライブのデータベースアクセス それがそうです。 |
|
アプリケーションを起動する前に、リソースのために作成するインデックスのセットを指定することができます。 インデックスは辞書として表され、キーはインデックス名であり、値は(フィールド、方向)ペアのタプルリストであるか、またはフィールド/方向ペアリストを有するタプルである。 and 辞書として表されるインデックスオプション、例えば マルチペアは、複合インデックスを作成するために使用されます。Directionは、PyMongoによってサポートされるすべてのタイプの値、例えば 注意してください。 インデックス設計、作成、保守は非常に重要な課題であり、非常に慎重に計画され、実行されなければならないことを覚えておいてください。一般的に、これはまた非常に資源を消費する操作だ。したがって、このタスクは、APIインスタンス化コンテキストの外で手動で処理することを望むことができるかもしれません。デフォルトの場合、任意の定義変更された既存のインデックスが削除され、再作成されることを覚えておいてください。 |
|
終端ノードの許可論理を持つクラス.提供されていなければ,最終的な汎用authクラス(アプリケーション構造関数パラメータとして渡す)を用いる.認証とライセンスの詳細については、ご参照ください 認証と権限 それがそうです。黙認する. |
|
そのフィールドリスト 組み込み資源序列化 デフォルトで有効です。この機能を正常に動作させるためには,リスト中のフィールドは |
|
有効化後、Mongo解析器は、オプションの文字列をObjectIdに自動的に変換することを回避します。データベース中の文字列フィールドの値を実際にObjectID値に変換することができるが,ObjectID値に変換すべきでない場合には,これはごく少数の場合に有用である.検索に影響を与えます ( |
|
いつ? |
|
ETagg値を計算するフィールドリストには適用されない.黙認する. |
|
資源が処理している実データ構造の辞書を定義する.データ検証を有効にする。見 Schema Definition それがそうです。 |
|
いつ? |
|
いつ? |
|
もし |
|
もし |
|
もし |
以下は、主にグローバルAPI設定をカバーすることによって行われるリソースカスタマイズの例である。
people = {
# 'title' tag used in item links. Defaults to the resource title minus
# the final, plural 's' (works fine in most cases but not for 'people')
'item_title': 'person',
# by default, the standard item entry point is defined as
# '/people/<ObjectId>/'. We leave it untouched, and we also enable an
# additional read-only entry point. This way consumers can also perform
# GET requests at '/people/<lastname>'.
'additional_lookup': {
'url': 'regex("[\w]+")',
'field': 'lastname'
},
# We choose to override global cache-control directives for this resource.
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
# we only allow GET and POST at this resource endpoint.
'resource_methods': ['GET', 'POST'],
}
構造定義¶
あなたのAPIが読むだけでない限り、リソースを定義したいかもしれません schemas それがそうです。入力されたストリームの適切な検証を可能にするので、アーキテクチャは重要である。
# 'people' schema definition
schema = {
'firstname': {
'type': 'string',
'minlength': 1,
'maxlength': 10,
},
'lastname': {
'type': 'string',
'minlength': 1,
'maxlength': 15,
'required': True,
'unique': True,
},
# 'role' is a list, and can only contain values from 'allowed'.
'role': {
'type': 'list',
'allowed': ["author", "contributor", "copy"],
},
# An embedded 'strongly-typed' dictionary.
'location': {
'type': 'dict',
'schema': {
'address': {'type': 'string'},
'city': {'type': 'string'}
},
},
'born': {
'type': 'datetime',
},
}
ご覧のように、モードキーは実際のフィールド名であり、値はフィールド検証ルールを定義する辞書である。許可された検証ルールには:
|
フィールドデータタイプ。以下の1つであってもよい。
MongoDBデータ層を用いると,
見 GeoJSON より多くの情報については、地理的地域にアクセスしてください。 |
|
もし |
|
もし |
|
許容最小と最大長 |
|
許容最小値と最大値 |
|
の許容値リスト |
|
文字列フィールドにのみ適用されます。もし |
|
属性中の許容値リスト. |
|
検証案があります |
|
このフィールドの値は、セットにおいて一意でなければならない。 検証制約は,ペイロード文書自体の間で検査を行うのではなく,データベースに対して検査されることに注意されたい.これは、複数の文書ペイロードがあり、2つ以上の文書が‘Unique’制約を設定したフィールドに対して同じ値を搬送する場合、データベースに重複項がないので、ペイロードの検証に成功するという興味深い転換点をもたらす。 これが問題である場合、クライアントは、挿入のために常に1つの文書を送信するか、またはペイロードをAPIに提出する前にローカルに検証することができる。 |
|
このフィールド値は、ユーザに対して一意である。これは以下のような場合に有用である ユーザ制限されたリソースアクセス エンドポイントで有効です。このルールは以下の条件により検証される. ユーザーデータのみ それがそうです。したがって、このシーンでは、異なるユーザによって記憶されている限り、重複が許可される。逆に、単一のユーザは、反復値を格納することができない。 URRAがサイト上でアクティブ状態にない場合,このルールの振舞いは以下のとおりである. |
|
このフィールドの値は、リソースにおいて一意でなければならない。 これは違います |
|
指定値が満たされなければ検証できない引用完全性ルールを許す.これは4つのキーを持つ辞書です |
|
もし |
|
このフィールドのデフォルト値。POSTおよびPUT要求を処理する際には、欠落フィールドに構成されたデフォルト値を割り当てる。 タイプにも適用されます schema = {
# Simple default
'title': {
'type': 'string',
'default': 'M.'
},
# Default in a dict
'others': {
'type': 'dict',
'schema': {
'code': {
'type': 'integer',
'default': 100
}
}
},
# Default in a list of dicts
'mylist': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'name': {'type': 'string'},
'customer': {
'type': 'boolean',
'default': False
}
}
}
}
}
|
|
以下の場合、ドキュメントバージョン制御を有効にする |
|
もし |
|
全ての値を検証する仕組みです |
|
これは |
|
フィールド値が提供された正規表現規則と一致しない場合、検証は失敗する。文字列フィールドにのみ適用されます。見 regex Cerberus Docsにあります |
|
この規則は、ターゲットフィールドを許可するために存在しなければならないフィールドリストをリストすることを可能にする。見 dependencies Cerberus Docsにあります |
|
この規則は、検証に基づいた複数の規則のセットを列挙することができます。フィールドがリスト内の1つのセットに従って検証される場合、フィールドは有効であるとみなされる。見 *of-rules Cerberus Docsにあります |
|
相同 |
|
相同 |
|
相同 |
|
タイプ強制は、任意の他のベリファイアを実行する前に、呼び出し可能な値をある値に適用することを可能にします。呼び出し可能オブジェクトの返り値は,文書中の新しい値を置き換える.これは、データを検証する前に値を変換するか、またはデータをクリーニングするために使用されて見 value coercion Cerberus Docsにあります |
構造文法は Cerberus はい、延長できます。実際イヴ自身は追加することで unique
そして data_relation
キーワード、そして objectid
データタイプです。カスタム検証と用法例に関するより多くの情報は、参照されたい データ検証 それがそうです。
はい。 リソース/プロジェクト最終ノード あなたは自分で定義しました people endpoint. Then, in this section, you defined people validation rules. Now you are ready to update the domain which was originally set up in Domain Configuration :
# add the schema to the 'people' resource definition
people['schema'] = schema
# update the domain
DOMAIN['people'] = people
高度なデータソースモデル¶
♪the datasource
キーワードは、APIリソースをデータベースセットに明示的にリンクすることを可能にする。省略すると,偽ドメイン資源鍵もデータベース集合の名前である.これは4つの許容キーを持つ辞書です
|
資源が使用するデータベース集合の名前.省略すれば,資源名も有効な集合名であると仮定する.見 複数のAPIエンドポイント、1つのデータソース それがそうです。 |
|
データを検索して検証するためのデータベースクエリ。省略すると,デフォルトで集合全体を検索する.見 事前定義されたデータベースフィルタ それがそうです。 |
|
終端ノードが公開しているフィールドセット.省略されると、デフォルトの場合、すべてのフィールドがクライアントに返される。見 API終端ノードの公開を制限するフィールドセット それがそうです。 |
|
終端で検索された文書のデフォルトランキング.省略されると、文書はデフォルトのデータベース順序で返されます。有効な文は以下のようにすべきである.
ランキングとフィルタの詳細については、参照されたい 濾過除去. それがそうです。 |
|
配管とオプションを集約します。他のすべてのものを使うと これは、以下の1つ以上のキーを有する辞書である。
設定するだけでいいです |
事前定義されたデータベースフィルタ¶
API終端ノードのデータベースフィルタは filter
キーワード。
people = {
'datasource': {
'filter': {'username': {'$exists': True}}
}
}
上の例では people リソースは既存のものを公開し更新するだけで username 現場です。
所定のフィルタは、ユーザクエリ上で実行される(GET要求 where 条項)と標準条件要求 (If-Modified-Since (など)
データソースフィルタは、GET、PATCH、DELETE要求に適用されることに注意されたい。あなたのリソースがPOST要求(文書内挿)を許可する場合、それに応じて検証ルールを設定する必要がある場合があります(私たちの例では、“ユーザ名”は必須フィールドである場合があります)。
静的フィルタと動的フィルタ
所定のフィルターは静的である。あなたはまだ利用できます 事件とリンクする. システム(具体的には on_pre_<METHOD>
フック)に動的フィルタを設ける.
複数のAPIエンドポイント、1つのデータソース¶
複数のAPIエンドポイントは、同一のデータベースセットを指すことができる。例えば、両方を設定することができます /admins
そして /users
同じ位置からの読み出しと書き込み people データベース上の集合。
people = {
'datasource': {
'source': 'people',
'filter': {'userlevel': 1}
}
}
以上の設定では、検索、編集、削除のみが設定されます people 集合、その中に含まれる userlevel 全部で1つです。
API終端ノードの公開を制限するフィールドセット¶
デフォルトの場合、GET要求に対するAPI応答は、対応するリソースによって定義されるすべてのフィールドを含む。 schema. ♪the projection
設ける datasource リソースキーワードにより、フィールドセットを再定義することができます。
何かを隠したいときには 秘密フィールド. クライアントでは、投影設定を含み、表示すべきすべてのフィールドを含むことを使用しなければなりません。しかしながら、デフォルト応答をいくつかのフィールドに制限することを望むが、クライアント投影を介してそれらにアクセスすることが依然として許可されている場合、独占投影設定が使用され、除外フィールドは省略されるべきである。
以下に投影設定を含む例を示す.
people = {
'datasource': {
'projection': {'username': 1}
}
}
以上の設定は公開されます username フィールドは要求を取得するために来ました schema 資源のために定義されている.他のフィールドと できません。 クライアント投影によっても暴露される.以下のAPI呼び出しは返されません lastname あるいは…。 born それがそうです。
$ curl -i http://myapi/people?projection={"lastname": 1, "born": 1}
HTTP/1.1 200 OK
また、API応答からフィールドを除外することができます。しかし今回は排除された分野は はい。はい。 クライアント投影にさらされる.以下に独占投影設定の例を示す.
people = {
'datasource': {
'projection': {'username': 0}
}
}
以上にはすべての伝票フィールドが含まれますが username それがそうです。ただし,以下のAPI呼び出しは返される. username 今回です。したがって、あなたはこのたびを利用してメディア分野や他の高価な分野にサービスを提供することができます。
ほとんどの場合、投影設定がないか、または投影設定を含むことが好ましい。投影を含むことによって、秘密フィールドはサーバ側から保護され、返されたデフォルトフィールドは、クライアントのショートカット関数によって定義されることができる。
$ curl -i http://myapi/people?projection={"username": 1}
HTTP/1.1 200 OK
POSTおよびPATCH方法は、依然としてアーキテクチャ全体を動作させることが可能であることに留意されたい。例えば、挿入と修正を保護したい場合、この機能は役に立ちます。 認証と権限 プログラムは,同時に読み出しアクセス権限を公衆に開放する.
また見られる.