1

私は REST (またはほぼ REST) Web API
を持っています。何らかの理由で GET 呼び出ししかできない場合でも、API ユーザーがすべての API を使用できるようにしたいので、計画では URL パラメーター (クエリ文字列) を受け入れることです。 )request_methodGET(デフォルト)またはPOST、PUT、DELETEのように、それらをルーティングしたい。

私の質問は、標準のリクエストハンドラーのオーバーライドと、get(self)これが POST、PUT、DELETE であり、適切な関数を呼び出すことを意図している場合、メソッド内の各 httpRequestHandler をチェックインすること以外です。この「ルーティング」をより一般的に行う方法はありますか?アプリケーション定義の URL パターンやルーティング機能のオーバーライドなどの方法でしょうか。

明確にするために、これらのリクエストはすべて、たとえば次のようなパラメーターを使用してGET経由で送信されます ?request_method=POST

どんな提案でも大歓迎です。

可能な解決策:

  • ".*" URL パターンのみを持ち、単一の RequestHandler ですべてのルーティングを処理します。Tornado の URL パターン マッチング機能を利用しないことを除けば、問題なく動作するはずです。

  • すべてのリクエスト ハンドラのifすべてのメソッドに を追加し、リクエストを処理する必要があるかどうかを確認します。そうでない場合は、関連するメソッドを呼び出します。get(self)get

4

1 に答える 1

2

これは非常に愚かなことです。Chrome と Firefox は、他の多くの Web ユーザー エージェントと同様に、URL を含むページ上のリンクの一部またはすべてを投機的にフェッチ (GET) しrequest_method=DELETEます。誰かが見回したという理由だけで、データベースが空になっていることがわかります。故意に HTTP を壊さないでください。GET は「安全な」方法であると定義されています。つまり、好きな URL を GET しても問題はなく、悪いことは何も起こりません。

同様の状況にある他のユーザーの編集
: OP は、JSONP を使用しており、API サーバーとクライアント Web アプリの両方を制御していると述べています。このような場合、理想的なソリューションはCross-Origin Resource Sharing (CORS、仕様) ですが、この技術には IE8 以降、Firefox 3.5 以降、Safari 4 以降、または Chrome 3 以降が必要です。以前のブラウザーをターゲットにする必要があり、両方のドメインを制御している場合は、少なくとも独自のクライアント Web アプリ用に 2 つのドメインのコンテンツをマージすることをお勧めします。API ドメインは外部クライアント用に残すことができますが、CORS ブラウザーの要件によって制限されます。

于 2013-01-30T10:02:56.520 に答える