파이썬(Python)/Flask

REST API란? flask를 통해 예제 실습하기

끄적끄적아무거나 2021. 4. 29. 18:58
반응형

REST API 개념

REST 는 REpresentational State Transfer 의 줄임말이다. 검색을 통해 찾아보면 일반적으로 자원(resource)을 이름으로 구분해서 자원의 정보를 주고 받는 것을 의미한다라고 나와 있다. 

 

위처럼 정의로 의미를 알기는 어려워서 내가 사용하는 환경(파이썬)의 예를 통해 설명하려고 한다. flask를 통해서 인구 정보를 가진 웹을 구축하였다고 예를 들어 보자. 그리고 해당 인구 정보는 DB에서 관리된다. 인구 정보를 DB에서 가져오려고 하는데 해당 웹페이지를 모두 로딩할 필요없이 사전에 약속된 주소로 DB값만 요청이 가능하게 만들 수 있다. 여기서 약속된 주소를 자원(resource)을 표현(representation)하였다고 한다. 한마디로 (flask에서 정의한) HTTP URI를 보낸 것이다. 보내는 방식은 CRUDE 를 통해 진행하는 데 아래와 같다.

 

  • 생성(POST) - Creat
  • 조회(GET) - Read
  • 수정(PUT) - Update
  • 삭제(DELETE) - Delete
  • 헤더조회(HEAD)

 

 

일반적으로 POST와 GET만 사용한다. 여기 설명한 예제에서는 DB에서 값만 가져오므로 GET method와 HTTP URI 를 서버에 요청을 보내면 된다. 그러면 flask로 만든 서버에서 해당 주소의 요청을 보고 DB나 텍스트로 저장된 인구 정보를 보내준다. 

 

인구 정보를 보내는 방식은 크게 JSON 과 XML 이 있다. 해당 방식을 사용하는 이유는 flask를 구성하는 언어와 HTML을 읽는 프로그램이 다르기 때문에 직접 데이터를 못보내는 데 JSON을 사용하면 각 프로그램에서 읽을 수 있게 내장되어 있기 때문에 해당 방식을 사용한다. 

 

API (Application Programming Interface)는 우리가 핸드폰이 돌아가는 원리는 모르지만 어떤 버튼을 누르면 어떤 동작을 하는지는 알고 있다. 이처럼 API는 외부에서 프로그램을 사용할 수 있게 도와주는 버튼과 같은 것이다. 그래서 REST API란 앞서 얘기한 HTTP URI 와 상태 전달이 서로 되도록 해주는 것이다.

 

 


FLASK 파이썬을 이용한 REST API 예제 실습

 

예제코드>>

from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/population')
def population():
    pop_info = {'Seoul' : 9598484, 
            'Busan' : 3372399,
            'Gyeonggi' : 13465837,
            }
    return jsonify(pop_info)


if __name__ == "__main__":              
    app.run(host="0.0.0.0", port="9999")

 

결과>>

 

주석>>

혹시 flask 기본 동작을 잘 모른다면 아래 링크를 참조하길 바란다.

 

 

Flask route란

flask route는 입력 인자의 위치를 웹브라우져를 통해 접속 했을 때 route 바로 밑에 정의 된 함수를 실행해서 return 값을 웹브라우져에 표현해 주는 것이다. 아래 예를 통해 이해해보자. 코드 - test.py>

scribblinganything.tistory.com

flask는 웹서버 동작을 위해 import 하였다. jsonify는 REST API에서 데이터를 던져 줄때 JSON 형태로 보내기 위해 import 하였다.

 

pop_info 를 dictionary 로 값을 저장하였다. 그리고 해당 값을 json으로 return하였다. 

 

웹브라우저를 통해 http://localhost:9999/population HTTP URI로 접속을 하게 되면 flask에 의해 def population() 함수가 실행될 것이다. 

 

그래서 return 받은 값을 웹브라져가 결과처럼 읽었다. 해당 과정이 REST API의 동작 예이다. 

 

 

 

 

 

반응형