TIL 4주차: API 만들기

iris·2020년 8월 22일
0

목표: API 설계하고, Flask 프레임워크 사용해 만들기

1. API(Application Programming Interface)란?

응용 프로그램(앱)에서 기능을 사용하거나 데이터를 주고 받기 위한 기능들을 말함.

  • 2주차에 사용한 랜덤 고양이 사진 API를 살펴보면,
  1. 클라이언트: 나의 chrome 창에서
  2. 요청(Request): 요청 URL을 입력하고 엔터를 치는 것은 아래와 같은 의미.
  3. 서버 기능: 서버는 정해진 동작인 랜덤 고양이 사진 데이터 조회를 실행하고
  4. 응답(Response): 고양이 사진 데이터(JSON)를 클라이언트에 응답해줌

2. Flask 기초 - API 만들기(화면 코드를 보내주는 API)

2.1 Flask 프로젝트 설정 & 구조 확인하기

  • 파이썬에서 가상환경(virtual environment) 설치
    • Location은 현재폴더/venv로 설정
  • pip(python install package) 사용하여 flask 패키지 설치
  • Flask 기본 폴더 구조 만들기
    Flask를 사용할 때는 기본 설정을 지켜줘야 함
    • Static 폴더: 이미지, css 파일을 넣어둠
    • templates 폴더: html 파일을 넣어둠
    • app.py 파일

2.2 Flask 기본 실행

Flask는 웹을 만들고 서버를 구동시키기 편하게하는 프레임워크. 서버를 구동하려면 필요한 복잡한 일을 간편하게 쓸 수 있음.

  • 통상적으로 Flask 서버를 실행시키는 파일을 app.py리고 이름지음
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)
  • 크롬에서 http://localhost:5000/로 접속
  • @app.route('/')안의 /가 URL 세부 주소가 됨. 위 주소에서 /로 접속하면 hello_world()함수를 실행
  • stop 버튼을 누르거나, ctrl+c로 종료

2.3 Flask로 URL 만들기

  • @app.route('/')부분을 수정해서 URL을 부여할 수 있음
    단, @app.route(URL경로)에서 URL경로와 함수명은 유일해야 함
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def home():  # 함수명 수정 - 이름만 보고 접속되는 페이지를 확인할 수 있게!
    return render_template('index.html')


@app.route('/mypage')
def my_page():
    return 'This is My Page!'


if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

2.4 Flask로 화면 띄우기 - HTML 파일 사용

templates폴더에는 HTML 파일을 담아둠. 실행할 때에는 이 폴더에서 화면을 불러옴.

2.4.1 간단한 index.html 파일을 templates 안에 만들기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <title>첫 Flask 프로젝트</title>
    </head>
    <body>
        <h1>서버를 만들었다!</h1>
    </body>
</html>

2.4.2 HTML 파일 불러오기

Flask 내장함수 render_template를 이용해 HTML 파일을 불러옴
app.py 파일을 수정

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def home():  # 함수명 수정 - 이름만 보고 접속되는 페이지를 확인할 수 있게!
    return render_template('index.html')


@app.route('/mypage')
def my_page():
    return 'This is My Page!'


if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

2.5 Flask로 화면 띄우기 - HTML 화면에 이미지 불러오기

  • static폴더는 이미지나 css 파일과 같은 정적 파일을 담아두는 역할.
    이미지를 다운받고 static 폴더에 넣음
  • Flask에서 HTML을 부를 때, 저장된 이미지 파일 불러오기
    • 이 HTML 파일은 Flask에서 읽어주기 때문에, Flask에 미리 정의된 규칙대로 경로를 입력해줘야 함.
  <!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <title>Title</title>
    </head>
    <body>
        <h1>서버를 만들었다!</h1>
        <img src="{{ url_for('static', filename='rome.jpg') }}"/>
    </body>

3. Flask 기초 - API 만들기(JSON 형식 데이터를 보내주는 API)

클라이언트가 요청을 할 때에도 '방식'이 존재함.
클라이언트는 요청할 때 HTTP request method를 통해 어떤 요청 종류인지 응답하는 서버 쪽에 정보를 알려줌

3.1 GET, POST 요청 타입

  • GET → 통상적으로 데이터 조회(Read)를 요청할 때
    예) 영화 목록 조회
    → 데이터 전달: URL 뒤에 물음표를 붙여 key=value로 전달
    → 예: google.com?q=북극곰
  • POST → 통상적으로 데이터 Create, Update, Delete를 요청할 때
    예) 회원가입, 회원탈퇴, 비밀번호 수정
    → 데이터 전달: 바로 보이지 않는 HTML body에 key:value 형태로 전달

0개의 댓글