밑바닥부터 만드는 웹 서비스 -2 flask를 이용해 rest api 서버 구축
개요
우선 기본적인 flask 를 통해 rest api 의 get, post, put, delete 를 구현하고 사용자 요청을 받는 방법과 요청을 받아 DB에 접근해서 데이터를 가져오는 것까지 해보자
세팅
backend/app.py
from flask import Flask
from flask_cors import CORS
from flask_restplus import Resource, Api, reqparse
app = Flask(__name__)
CORS(app)
title = 'my homepage'
api = Api(app=app)
class HealthCheck(Resource):
def get(self):
'''
사용자가 보낸 parameter를 통해
데이터를 보내줍니다.
:return:
'''
return {'msg': 'get ok'}
def post(self):
'''
사용자가 보낸 session 정보를 통해
수정 역할을 합니다.
:return: 수정 여부를 반환합니다.
'''
return {'msg': 'post ok'}
def put(self):
'''
사용자가 보낸 데이터를 저장한다.
:return:
'''
return {'msg': 'put ok'}
def delete(self):
'''
데이터를 삭제한다.
:return:
'''
return {'msg': 'delete ok'}
api.add_resource(HealthCheck, '/v0.0/test')
if __name__ == '__main__':
app.run(debug=True, port=5002)
실행 해보면
예시 하나로 get 을 실행해보면 (Mac 과 Windows 조금 달라요)
response body를 보면 우리가 설정한 return 값이 나오는 걸 알 수 있습니다.
위의 curl 이 요청을 보낸 명령어로 이를 터미널에서 하면 같이 받을 수 있는 걸 볼 수 있습니다. 혹은 Postman 같은 프로그램을 통해 확인할 수 있습니다.
그래도 시각적으로 처리하는 게 처리하기 쉬우니까 저는 flask 의 swagger를 쓰겠습니다.
각 기능들 기본 틀 만들기
공식 레퍼런스 참고 : http://flask-restful.readthedocs.io/en/0.3.5/quickstart.html
블로그 참고 : https://medium.com/@feedbots/python-flask-%EB%A1%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-rest-api-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0-60a29a9ebd8c
우선 db 에서 데이터를 가져오기 전에 클래스 내에 object를 만들고 다뤄봅시다.
클래스 안에 하나 만들었습니다.
class HealthCheck(Resource):
# 이 데이터를 수정하면서 해봅시다.
test_object = {
'_id_inspire12' : {
'user_id' : 'inspire12' ,
'user_name' : 'flask_user' ,
'board' :
[{
'content_id' : 1 ,
'title' : 'hi'
},
{
'content_id' : 2 ,
'title' : 'hi'
}]
}
}
Get
: header 의 url 을 파싱해서 받는 부분이 필요합니다. reqpase 객체를 활용합니다.
@api.doc ( '' )
@api.param ( 'user_id' , '' )
def get( self ):
'''
사용자가 보낸 parameter를 통해
데이터를 보내줍니다.
:return :
'''
# parameter 를 받습니다.
param_list = [ 'user_id' ]
parser = reqparse.RequestParser()
for param in param_list:
parser.add_argument(param)
query = parser.parse_args()
# 제대로 parameter를 받았는지 debug를 위해
print ( '_id_{}' .format(query[ 'user_id' ]))
# return 데이터를 받아놓습니다.
res = self .test_object.get( '_id_{}' .format(query[ 'user_id' ]))
# 데이터, 반응, 헤더 로 구성
return res, HTTPStatus.OK, {}
Post
: body 의 json 오브젝트를 받습니다.
@api.doc ( '' )
@api.param ( 'body' , '' , 'body' )
def post( self ):
'''
사용자가 보낸 session 정보를 통해
수정 역할을 합니다.
:return : 수정 여부를 반환합니다.
'''
data = request.get_json( silent = True , force = True )
# 데이터 확인
print (data)
return data
Post 의 경우 body 형식으로 전송해야하는데
flask swagger에서 전달이 안되네요..
그래서 postman 으로 확인했습니다..
put 의 경우 post 방식으로 하고
delete 의 경우 get 방식으로 하면 됩니다.
다음 포스팅에
post와 put, delete 를 db와 연결해서 구현해보겠습니다.
추가적으로
API관리와 로직 분리(의존성) 위해 코드를 정리하고 몽고 db를 통해 db 를 구성봅시다.
그 이후 angular 를 통해 프론트엔드 부분을 처리하겠습니다.
from http://inspire12.tistory.com/130 by ccl(A) rewrite - 2020-03-06 19:20:27
댓글
댓글 쓰기