1

Python で自分用の API を計画しています。いつか自由にアクセスできるようにするかもしれませんが、今は趣味のサイトでのみ使用する予定です。この段階で、GET 要求と POST 要求の両方を受け取るファイルの URL を設定する方法についてアドバイスが必要です。

ファイルの 1 つが次のように呼び出されfunction_A.py、使用されているとします。

www.example.com/api/function_A.py?a=something&k=other+thing

私の質問は、リソースを最も消費しない方法で、API で「きれいな」URL を設定するにはどうすればよいですか?

http://www.example.com/api/readほとんどの API には、代わりに次のような典型的な URL 形式があります。http://www.example.com/api/read.py

私のオプションはおそらくDjango を使用したmod_rewritev/sに限定されていますurls.py- または別のより簡単なオプションはありますか?

これはバックエンド/API 用であり、オーバーヘッドを最小限に抑えたいと考えています。この方法で 4 つの URL を処理したいだけで、URL が呼び出されるたびに正規表現が発生することは望ましくありません。

4

4 に答える 4

1

私の推測では、きれいな URL (別名 REST) を持つ Web サービス API は、ある種の Web フレームワーク (Werkzeug、web.py、django、pylons、cherrypy、plain wsgi など) を介して構築されていると思います。

あなたが参照しているモジュールは、リクエストの正しいルートを決定するために URL マッチング/処理を処理します。

後者のドキュメントから:

Routes は、Web 開発で頻繁に発生する興味深い問題に取り組んでいます。URL をアプリケーションのアクションにどのようにマッピングしますか? つまり、これは としてアクセスする必要があり、それを行う必要があるとどのように言えます/blog/2008/01/08/login? 多くの Web フレームワークには、固定のディスパッチ システムがあります。たとえば、directory内の/A/B/Cファイルを読み取る、またはmodule 内のクラスのメソッドを呼び出すことを意味します。これらは、コードをリファクタリングする必要があり、メソッドを移動するとパブリック URL が変更され、ユーザーのブックマークが無効になることに気付くまでは問題なく機能します。同様に、URL を再編成してセクションをサブセクションにする場合は、慎重にテストされたロジック コードを変更する必要があります。CBCBA.B

于 2009-12-27T17:04:02.650 に答える
1

はい、.htaccess は、Apache サーバーのきれいな外部 URL から、サービス プラットフォームが受け入れる汚れた URL にマップできる方法です。

一部の複雑なプラットフォームには、より適切な URL を生成する手段もあります。

于 2009-12-27T17:06:04.033 に答える
1

魔法はありません。ファイルベースの URL を念頭に置いて設計された Web サーバーを使用しています。

ほとんどのサイトは、もはやファイルベースの URL を気にせず、代わりに独自のディスパッチを行っています。これが Django の機能であり、ASP.NET MVC の機能です。

検索する必要があるのは、Apache のmod_rewriteです。非ファイルベースの URL を Python ファイルにマップできるようになります。

または、既にこれを行っている Python Web フレームワークの使用を検討してください。Web.pyDjangoはいいですね。

于 2009-12-27T17:06:37.620 に答える
1

MYYN は正しいです。Ruby on Rails や Django などのフレームワークを使用するのが、RESTful API を作成する最も簡単な方法です。

ただし、フレームワークを使用したくない場合は、Apache で mod_rewrite を使用して同じことを行うことができます。実際、これはまさに Apache で実行されているほとんどのフレームワーク/アプリケーションが行うことです。

たとえば、Wordpress は次のような .htaccess ファイルを使用します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これにより、すべてのリクエストが index.php に送信され、そこで解析および処理できます。

RoR や Django などのフレームワークは、実質的に同じことを行います。すべてのリクエストは、単一のファイル/クラス/関数にリダイレクトされます。

于 2009-12-27T17:15:46.637 に答える