Flask를 사용하여 REST API를 만드는 방법

21078 단어 flaskrestpythonapi
Flask은 웹 애플리케이션 개발에 사용할 수 있는 python용 마이크로프레임워크입니다. 이 기사에서는 Flask-RESTful을 사용하여 Flask에서 RESTful API를 생성하는 방법을 살펴봅니다.



설치



프로젝트를 설정하기 전에 다른 프로젝트와 격리된 Python 패키지 설치를 유지하기 위해 가상 환경을 만듭니다.

가상 환경을 설정하기 위해 virtualenv를 설치합니다.

sudo pip install virtualenv


그런 다음 venv라는 가상 환경을 만들고 활성화합니다.

virtualenv venv
source venv/bin/activate


그런 다음 이러한 가상 환경에 Flask 및 Flast-RESTful을 설치합니다.

pip install Flask
pip install flask-restful


모델



노트 제목, 설명, 생성된 날짜, 생성된 사람 및 id를 기본 키로 하는 우선 순위 필드를 사용하여 노트 모델을 생성합니다. 이 애플리케이션의 데이터베이스로 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)


자원



리소스는 Flask-RESTful의 빌딩 블록입니다. 리소스 클래스는 HTTP 메서드를 개체에 매핑하는 데 사용됩니다. NoteResource 클래스를 먼저 정의하는 파일resource.py을 생성합니다.

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는 flask.request 개체의 변수에 대한 액세스를 제공하는 데 사용되는 Flaks-RESTful 요청 구문 분석 인터페이스입니다.

marshall_with 데코레이터는 API에서 데이터 객체를 가져오고 필드 필터링을 적용합니다.

모든 Note 요소에 대해 리소스를 하나 더 추가합니다.

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에 추가하기 위해 다른 파일api.py을 만듭니다.

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)


Flask 서버 시작 및 요청 보내기



플라스크 웹 서버를 실행하려면

python api.py


API는 Chrome용 Postman 및 Firefox용 httprequester와 같은 curl 또는 브라우저 애드온을 사용하여 테스트할 수 있습니다.
모든 메모 목록을 얻으려면 다음 URL로 GET 요청을 보내십시오.

http://127.0.0.1:5000/notes/

새 메모를 추가하려면 요청 본문 부분에 다음 형식의 데이터와 함께 동일한 URL에 POST 요청을 보냅니다.

{
    "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에 게재되었습니다.

좋은 웹페이지 즐겨찾기