이전에 Flask-intro 블로그에서 살펴본 Flask를 본격적으로 시작하고자 한다.
간단하게 http 메소드를 get으로 api로 요청하면 응답을 받는 endpoint를 구축해보자
(base) $ mkdir -p ~/develop/api
mkdir
: "Make Directory"의 약자로, 새로운 디렉토리를 생성해주는 리눅스 명령어
-p
: mkdir
의 옵션, 디렉토리의 중간 경로가 존재하지 않으면 자동으로 생성
(base) $ cd ~/develop/api
(base) $ vim app.py
app.py
를 생성하고 endpoint 기능에 대한 code를 작성한다# /develop/api/app.py
from flask import Flask #1)
app = Flask(__name__) #2)
@app.orute("/ping", methods=['GET']) #3)
def ping(): #4)
return "pong"
1) Flask를 사용하기 위해서 먼저 Flask를 import한다
2) import한 Flask 클래스를 객체화(instantiate)하여 app이라는 변수에 저장한다
app 변수가 바로 API 어플리케이션이다(정확히 Flask 웹 어플리케이션)
3) Flask route 데코레이터(decorator)를 사용하여 Endpoint를 등록한다.
HTTP metods는 GET으로 설정하였다.
4) ping 함수(메소드)를 정의하였다. route 데코레이터를 통해 엔드포인트로 등록된 함수이다.
이 ping 함수(메소드)를 요청하면 "pong"을 리턴한다.
API 즉, endpoint를 실행하기 위해서는 server를 구동해야한다.
server를 구동하기 위해서는 python flask가 설치된 가상환경에서 구동해야한다.
그리고 앞서 만들었던 app.py가 위치한 디렉토리에서 다음과 같은 명령어로 server를 구동한다.
(base) $ conda activate develop
(develop) $ FLASK_APP=app.py FLASK_DEBUG=1 flask run
FLASK_APP=app.py
: Flask_APP
환경변수에는 Flask를 실행시키는 파일을 지정해주면된다. 따라서 우리가 작성한 파일 app.py
를 지정해주면된다.
FLASK_DEBUG=1
: FLASK_DEBUG
환경 변수를 1로 지정해 놓으면 디버그(debug)모드가 활성화된다. 디버그 모드가 활성화 되면 코드가 수정되었을때 어플리케이션을 다시 실행할 필요 없이 자동으로 재시작되어 수정된 코드가 반영된다.
flask_run
: flask server를 구동하면 기본적으로 localhost:5000으로 구동된다.(=http://127.0.0.1:5000)
(develop) $ http -v GET localhost:5000/ping
GET /ping HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:5000
User-Agent: HTTPie/0.9.8
HTTP/1.0 200 OK
Content-Length: 4
Content-Type: text/html; charset=utf-8
Date: Wed, 29 Jan 2020 11:54:08 GMT
Server: Werkzeug/0.16.1 Python/3.7.6
Pong
http -v
: http명령어를 사용하여 http요청을 보낼 수 있다.
-v
: -v
옵션은 "verbose"옵션으로 해당 HTTP 요청과 응답에 관한 추가적인 정보를 출력한다
GET
: 해당 http 요청은 "GET" method를 요청하는 것이다
localhost:5000/ping
: api의 주소로 localhost는 127.0.0.1 즉, 자기 자신을 가르키며, 5000은 통신 포트(port)번호를 말한다
/ping
은 RESTful API 기반 주소이다
Flask에서는 일반적으로 route 데코레이터를 사용하여 메소드들을 엔드포인트로 등록하는 방식이다
Flask에서 엔드포인트를 구현한다는 것은 결국 일반 함수(메소드)를 구현하는 것이다.
구현되는 함수(메소드)는 비즈니스 로직(business logic)을 구현하는 것이다.