web-dev-qa-db-ja.com

Flaskを使用してRESTful APIを作成しますか?

Flaskチュートリアルサイト こちら によると、RESTful APIを作成するには、_restful.Resource_を拡張するクラスを作成し、次のようにしてAPIに追加します。

_app = Flask(__name__)
api = restful.Api(app)
class HelloWorld(restful.Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')
_

ただし、私は、Flaskアプリで見慣れている@app.route('/path')デコレータで関数を使用するだけのチュートリアルをいくつか見てきました。たとえば、 ここ 、彼らは持っています:

_@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})
_

そして ここ

_@app.route('/')
def api_root():
    return 'Welcome'
_

_restful.Resource_クラスを使用した場合と、装飾された関数のみを使用した場合の違いは何ですか?違いがない場合、RESTful APIを作成するために、慣例として何をすべきですか?

16
u3l

短い答え

restful.Resourceは Flask-Restful 拡張機能からのものであり、これはFlask自体ではありません。 Miguelのチュートリアル 使用 Flask =安らかなインターフェースを書く。

長い答え

まず、Flaskに加えて、多数の Flask extensions があります。これらは一緒に動作しますが、個別のパッケージであり、個々の作者によって書かれています。 Flask-RestfulFlaskの拡張です。

Miguelのチュートリアルでは、Flaskを単独で使用してRESTful APIを作成する方法について説明しています。

Flask-Restful ホイールの再発明から私たちの一部を救う目的で、カスタムクラス(またはカスタムPythonデータ構造)をRESTful Webサービス Flask-RESTplusFlask-Restfulのフォーク、swagger UIを使用してapiドキュメントを自動生成します。

さらに、Flaskも ドキュメント化MethodViewの使用により、開発者は独自のRESTful API。並行して、 Flask-Restless はSqlAlchemyクラスをRESTful Webサービスに変換することを約束します。

更新(2016年7月18日) flask-api は、関数/ビューを休息のインターフェースに変え、 Django休息フレームワーク の作者であるトムクリスティーによって設計されました。

ローマへの道はたくさんあります

39
chfw
#from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

    return "Hello, World!"

if __name__ == '__main__':

    app.run(debug=True)
0
Hasitha Lakshan

多くのエンドポイントが必要な場合、クラスの代わりにメソッドを使用すると、すぐに混乱する可能性があります。クラス/リソースは、ロジックを分離および分離するためのより良い方法です。さらに、コードがより読みやすくなり、変更/修正が容易になります

Flask-restfulを使用するのがおそらく最良の方法ですが、APIのブループリントを作成し、ルーティングを構成し、リクエストパラメータを処理し、通常のすべてのAPIが必要とする多くのことを行うには、かなり面倒です。

私はこの軽量フレームワークをフラスコ・レストフルの上に構築しました。これにより、必要なすべての配線について心配することなく、レストフルAPIを簡単に構築でき、APIの定義とビジネスロジックのコーディングに集中できます。あなたはそれをここでチェックすることができます: https://github.com/sebastiandev/Peach

これは、NOSQLデータベースに重点を置いていますが、それは、デフォルトで提供されるデータベースのプロキシがmongodb用であるためであり、sqlが必要な場合は、sqlachemyのプロキシを作成できます(または構築する時間が見つかるまで待機します)。

0
Sebastian