기본 콘텐츠로 건너뛰기

밑바닥부터 만드는 웹 서비스 -2 flask를 이용해 rest api 서버 구축

밑바닥부터 만드는 웹 서비스 -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

댓글

이 블로그의 인기 게시물

Flask 13. pythonanywhere에 배포하기

Flask 13. pythonanywhere에 배포하기 Login: PythonAnywhere It's always a pleasure to hear from you! Ask us a question, or tell us what you love or hate about PythonAnywhere. We'll get back to you over email ASAP. Sorry, there was an error connecting to the server. Please try again in a few moments... www.pythonanywhere.com from http://ohdowon064.tistory.com/124 by ccl(A) rewrite - 2020-03-11 15:54:10

[ubuntu] FLASK_APP

[ubuntu] FLASK_APP Development/Debugging 🐞 FLASK_ENV=development FLASK_APP = app.py flask run zsh: command not found: FLASK_APP ✔️ FLASK_ENV=development FLASK_APP=app.py flask run 띄어쓰기를 해서 저런 오류를 출력할수도 있구나 😲 참고 : 108p에서 FLASK가 FKAS로 오타나있다. from http://hee-stories.tistory.com/18 by ccl(A) rewrite - 2020-03-24 17:20:11