본문으로 바로가기

# Rest API Flask - 기동 및 요청 수신

category Computer Science/Python 2020. 9. 13. 11:49

Flask 를 사용한 Rest API 서버 만들기

 

[POST 요청]

http://localhost:8000/test?&value1=cccc&value2=xxxx

 

[기동 및  POST 요청 수신]

> reqparse: argparser 인터페이스를 모델로 함

> parser.add_argument 

        : if required=True, 인수에 값이 필수적으로 들어가야 함 ( 들어가지 않으면 400 Error 발생 )

                    ex. http://localhost:8000/test?&value1=cccc   => value 2에 인수 값이 들어가지 않았으므로 400 Error

        : if required=False, 인수에 값이 필수적으로 들어가지 않아도 됨 ( 대신 None으로 들어옴 )

                    ex. http://localhost:8000/test?&value2=xxxx  => value 1에 인수 값이 들어가지 않아도 에러 발생 x, 대신 None 값 

> parser.parse_args

        : if parse_args(strict=True), 정의되지 않은 인수 포함 시 400 Error 발생

                    ex. http://localhost:8000/test?&value1=cccc&value2=xx&test=test  => test는 없는 파라미터임으로 400 Error 발생

        : if parse_args(), 정의되지 않은 인수 포함해도 상관 x

                    ex. http://localhost:8000/test?&value1=cccc&value2=xx&test=test  => test는 없더라도 나머지가 정상임으로 통과

> app.logger.[info/debug/warn/error]: Flask에서 제공하는 로깅

> 예외처리: 필수

# -*- coding:utf-8 -*-
from flask import Flask
from flask_restful import Api, Resource, reqparse


class TEST(Resource):
    # POST 요청만 수신
    def post(self):
        try:
            # 1. 인자값 수신
            parser = reqparse.RequestParser()
            parser.add_argument('value1', required=False, type=str, help='value 1')
            parser.add_argument('value2', required=True, type=str, help='value 2')
            # 파서가 정의하지 않은 인수 포함 시, 400 Error 발생
            args = parser.parse_args(strict=True)

            # 결과 반환
            return {'result': args['value1']}
        except Exception as e:
            app.logger.error(e)
            return {'error': str(e)}


# Rest URL 정의 + application 객체 생성
app = Flask('APP')
api = Api(app)
api.add_resource(TEST, '/test')

if __name__ == '__main__':
    # 0. 서버 실행 / 디버그 모드 On
    app.run(host='0.0.0.0', port=8000, debug=True)

 

[번외]

GET 요청 수신

class TEST(Resource):
    # GET 요청만 수신
    def get(self):