[解決済み】PythonのREST(Webサービス)フレームワークのおすすめは?[クローズド]
質問
RESTfulなAPIを書くためにサーバーサイドで使用するPythonベースのRESTフレームワークの推奨リストがどこかにありますか?できれば、長所と短所を教えてください。
ここにおすすめを自由に追加してください :)
解決方法は?
RESTful APIを設計する際に気をつけなければならないのは、GETとPOSTをあたかも同じもののように混同してしまうことです。この間違いを犯しやすいのは ジャンゴ 's 関数ベースビュー と CherryPy のデフォルトのディスパッチャですが、現在ではどちらのフレームワークもこの問題を回避する方法を提供しています ( クラスベースビュー と メソッドディスパッチャー それぞれ)。
HTTP-動詞は非常に重要です に陥ってしまうので、RESTではこの点に十分注意しなければなりません。 RESTのアンチパターン .
これを正しく理解しているフレームワークには、次のようなものがあります。 web.py , フラスコ と ボトル . と組み合わせると マイムレンダー ライブラリ(完全公開:私が書きました)を使えば、素敵なRESTfulなウェブサービスを書くことができます。
import web
import json
from mimerender import mimerender
render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message
urls = (
'/(.*)', 'greet'
)
app = web.application(urls, globals())
class greet:
@mimerender(
default = 'html',
html = render_html,
xml = render_xml,
json = render_json,
txt = render_txt
)
def GET(self, name):
if not name:
name = 'world'
return {'message': 'Hello, ' + name + '!'}
if __name__ == "__main__":
app.run()
サービスのロジックは一度だけ実装され、正しい表現の選択(Acceptヘッダー)+適切なレンダー機能(またはテンプレート)へのディスパッチが、整然とした透明性のある方法で行われるのです。
$ curl localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/html" localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/xml" localhost:8080/x
<message>Hello, x!</message>
$ curl -H "Accept: application/json" localhost:8080/x
{'message':'Hello, x!'}
$ curl -H "Accept: text/plain" localhost:8080/x
Hello, x!
アップデート(2012年4月) : Django のクラスベースのビュー、CherryPy の MethodDispatcher、Flask と Bottle のフレームワークについての情報を追加しました。質問された当時はどちらも存在しませんでした。
関連
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
Python カメの描画コマンドとその例
-
Python百行で韓服サークルの画像クロールを実現する
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")