일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 성능테스트
- 조가사키 해안
- 코딩
- ui 커스텀
- 가발자 인사이드아웃
- 판교퇴근길밋업
- aws
- 스카이라인 열차
- spring boot
- 알고리즘사이트
- 편한 즐겨찾기 편집
- 알고리즘분류
- 대규모 시스템 설계
- 프로그래밍
- 알고리즘초보
- 커스텀단축키
- 기능 많은 브라우저
- 알고리즘 추천
- 오블완
- 코코테라스
- Java
- 초년생
- mac 화면분할
- 브라우저 단축키
- 코드트리
- 스프링부트
- JMeter
- 소프트웨어 지표
- 자동화
- 알고리즘
- Today
- Total
영감을 (inspire) 주고픈 개발 블로그
밑바닥부터 만드는 웹 서비스 -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
우선 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 를 통해 프론트엔드 부분을 처리하겠습니다.
'시리즈 > 웹 페이지 만들기' 카테고리의 다른 글
밑바닥부터 만드는 웹 서비스 -3 Mongo DB(Docker)와 연결, rest api 클래스 정리 (0) | 2018.06.24 |
---|---|
밑바닥부터 만드는 웹 서비스 -1 : 설계 프론트엔드 : 엥귤러 / 백엔드 : flask REST API / DB 몽고DB(도커) (0) | 2018.06.15 |
웹 개발(백엔드 엔드 개발)에서 알아야 할 것들 (ver 0.1) (0) | 2018.06.13 |
웹 개발(프론트 엔드 개발)에서 알아야 할 것들 (ver 0.1) (0) | 2018.06.12 |