を使用してREST APIを作成する方法


Flask マイクロフレームワークpython Webアプリケーションの開発に使用できます.この記事では、我々はどのように使用するフラスコで安らかなAPIを作成する方法を参照してくださいFlask-RESTful .

インストール


プロジェクトを設定する前に、他のプロジェクトから分離されたPythonパッケージのインストールを維持するためのvirutal環境を作成します.
仮想環境を設定するには
sudo pip install virtualenv
それから、我々はVenvという名前の仮想環境をつくって、それを起動させます
virtualenv venv
source venv/bin/activate
その後、これらの仮想環境でフラスコとflast RESTfulをインストールします
pip install Flask
pip install flask-restful

モデル


私たちはノートのタイトル、説明、日付、createdChorseでプライマリキーとしてidとプライオリティフィールドでcreatedRAGEノートモデルを作成します.我々は、このアプリケーションのデータベースとしてSQLiteを使用します.
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime

DB_URI = 'sqlite:///./main.db'
Base = declarative_base()

class Note(Base):
    __tablename__ = 'notes'

    id = Column(Integer, primary_key=True)
    title = Column(String(80))
    description = Column(String(80))
    create_at = Column(String(80))
    create_by = Column(String(80))
    priority = Column(Integer)

if __name__ == "__main__":
    from sqlalchemy import create_engine

    engine = create_engine(DB_URI)
    Base.metadata.drop_all(engine)
    Base.metadata.create_all(engine)

資源


リソースはフラスコ安らかなブロックを構築しています.リソースクラスを使用してHTTPメソッドをオブジェクトにマップします.私たちはresource.py まず、NoteSourceクラスを定義します.
from models import Note
from db import session
from datetime import datetime
from flask.ext.restful import reqparse
from flask.ext.restful import abort
from flask.ext.restful import Resource
from flask.ext.restful import fields
from flask.ext.restful import marshal_with

note_fields = {
    'id': fields.Integer,
    'title': fields.String,
    'description': fields.String,
    'create_at': fields.String,
    'create_by': fields.String,
    'priority': fields.Integer
}

parser = reqparse.RequestParser()
parser.add_argument('title')
parser.add_argument('description')
parser.add_argument('create_at')
parser.add_argument('create_by')
parser.add_argument('priority')


class NoteResource(Resource):
    @marshal_with(note_fields)
    def get(self, id):
        note = session.query(Note).filter(Note.id == id).first()
        if not note:
            abort(404, message="Note {} doesn't exist".format(id))
        return note

    def delete(self, id):
        note = session.query(Note).filter(Note.id == id).first()
        if not note:
            abort(404, message="Note {} doesn't exist".format(id))
        session.delete(note)
        session.commit()
        return {}, 204

    @marshal_with(note_fields)
    def put(self, id):
        parsed_args = parser.parse_args()
        note = session.query(Note).filter(Note.id == id).first()
        note.title = parsed_args['title']
        note.description = parsed_args['description']
        note.create_at = parsed_args['create_at']
        note.create_by = parsed_args['create_by']
        note.priority = parsed_args['priority']
        session.add(note)
        session.commit()
        return note, 201
reqparseはフラスコの変数へのアクセスを提供するために使用されるFLAK RESTfulリクエスト解析インターフェイスです.リクエストオブジェクト.
Decoratorを使用すると、データオブジェクトをAPIから取得し、フィールドのフィルタリングを適用します.
すべての注記要素のためにもう一つのリソースを加えます
class NoteListResource(Resource):
    @marshal_with(note_fields)
    def get(self):
        notes = session.query(Note).all()
        return notes

    @marshal_with(note_fields)
    def post(self):
        parsed_args = parser.parse_args()
        note = Note(title=parsed_args['title'], description=parsed_args['description'],
                    create_at=parsed_args['create_at'], create_by=parsed_args['create_by'],
                    priority=parsed_args['priority'] )
        session.add(note)
        session.commit()
        return note, 201
別のファイルを作成するapi.py APIにこれらのリソースを追加するには
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource
from models import Note
from resources import *

app = Flask(__name__)
api = Api(app)

## Setup the API resource routing

api.add_resource(NoteListResource, '/notes/', endpoint='notes')
api.add_resource(NoteResource, '/notes/<string:id>', endpoint='note')


if __name__ == '__main__':
    app.run(debug=True)

フラスコサーバの起動とリクエストの送信


フラスコWebサーバを実行するには
python api.py
APIは、カールやブラウザのためのPostmanのようなブラウザのアドオンを使用してテストすることができますし、FirefoxのHttpRequster.
すべてのメモのリストを取得するには、次のURLにGETリクエストを送信します.
http://127.0.0.1:5000/notes/
新しいノートを追加するには、リクエストの本体部分の次の形式で同じURLにポストリクエストを送信します.
{
    "create_at": "2017-08-17 00:00", 
    "create_by": "v", 
    "description": "sample notes from api", 
    "priority": 1, 
    "title": "sample note from api"
}
実装とコードベースは上記の例で利用可能ですhere . プロジェクトを設定するには、リポジトリをクローン化し、仮想環境で要件をインストールし、サーバーを起動します.
希望の記事は助けだった!
その記事はもともと登場したApcelent Tech Blog .