RestFul API

RestFul API์—์„œ POSTํ•˜๊ธฐ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜๋ฉด DB์— ์ €์žฅํ•˜๊ธฐ) : mysql_connection์™€ config ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

567Rabbit 2024. 5. 20. 17:12

DB ์„ค๊ณ„ํ•˜๊ธฐ

 

์ฝ”๋“œ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•ด์„œ ์ž…๋ ฅํ•œ๋‹ค)

bash
๋‹ซ๊ธฐ
-- recipe_db ์—๋งŒ ์ „์šฉ์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค use mysql; create user 'recipe_db_user'@'%' identified by '๋น„๋ฐ€๋ฒˆํ˜ธ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•œ๋‹ค'; grant ALL privileges on recipe_db.* to 'recipe_db_user'@'%';

 

 

 

aws ์—”๋“œํฌ์ธํŠธ ๋ณต์‚ฌ

 

 

 

 

 

MySQL Hostname์— ๋ถ™์—ฌ๋„ฃ๊ธฐ

 

 

 

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•ž์ „์— ์„ค์ •ํ•œ๋Œ€๋กœ ์ž…๋ ฅํ•˜๊ธฐ

 

 

 

 

 

 

DB๋กœ ๋“ค์–ด๊ฐ€ recipe Table์„ ๋งŒ๋“ ๋‹ค

 

 

 

 

 

 

 

Postman ์‹คํ–‰ํ•˜๊ธฐ

 

New -> collection ํ•ด๋„ ๋˜๊ณ , +๋ชจ์–‘์„ ๋ˆŒ๋Ÿฌ์„œ Blanck collection ํ•ด๋„ ๋œ๋‹ค.

 

 

 

 

 

...  ๋ˆŒ๋Ÿฌ์„œ Add request

 

 

 

 

 

 

 

Body์— Data๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ Body ํด๋ฆญ

 

 

 

 

 

raw(์›๋ณธ ๋ฐ์ดํ„ฐ)๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„ ์ €์žฅ, ๋ฐ์ดํ„ฐ๋Š” json ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•จ

- json ํ˜•์‹์€ "ํฐ๋”ฐ์˜ดํ‘œ"๋งŒ ์‚ฌ์šฉํ•œ๋‹ค

 

 

 

 

 

 

VSCode

 

VScode์— app.py ํŒŒ์ผ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ณธ API ๋งŒ๋“ค๊ธฐ

 

 

 

 

 

 

app.py ์ž‘์„ฑ

 

 

 

 

 

recipe.py ์ž‘์„ฑ

- ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋งค์นญ๋˜๋Š” ๋ณ€์ˆ˜๋Š” %s๋กœ ํ•œ๋‹ค

bash
๋‹ซ๊ธฐ
from flask import request from flask_restful import Resource from mysql_connection import get_connection from mysql.connector import Error class RecipeListResource(Resource) : โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹def post(self) : โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹# 1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์ค€๋‹ค. โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹data = request.get_json() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹# 2. ์ด ์ •๋ณด๋ฅผ DB์— ์ €์žฅํ•œ๋‹ค. โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹try : โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 1. DB์— ์—ฐ๊ฒฐ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹connection = get_connection() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 2. ์ฟผ๋ฆฌ๋ฌธ ๋งŒ๋“ค๊ธฐ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹query = '''insert into recipe (name, description, num_of_servings, cook_time, directions) values ( %s , %s , %s , %s , %s);''' โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 3. ์ฟผ๋ฆฌ์— ๋งค์นญ๋˜๋Š” ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ \ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹record = (data['name'],data['description'],data['num_of_servings'],data['cook_time'],data['directions']) โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 4. ์ปค์„œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹cursor = connection.cursor() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 5. ์ฟผ๋ฆฌ๋ฌธ์„ ์ปค์„œ๋กœ ์‹คํ–‰ํ•œ๋‹ค โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹cursor.execute(query, record) โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 6. DB์— ์™„์ „ํžˆ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” commitํ•œ๋‹ค ์•ˆํ•˜๋ฉด rollback๋จ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹connection.commit() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹### 7. ์ž์› ํ•ด์ œ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹cursor.close() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹connection.close() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹except Error as e : โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if cursor is not None : # null์ด ์•„๋‹ˆ๋ฉด โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹cursor.close() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹if connection is not None : โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹connection.close() โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹return {'result' : 'fail' , 'error' : str(e) } , 500 # 500 ์—๋Ÿฌ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹return { 'result' : 'success' } , 200 # 200์€ ๋””ํดํŠธ๊ฐ’์ด๋ฏ€๋กœ ์•ˆ์จ๋„ ๋จ

 

 

 

 

mysql_connection.py ์ž‘์„ฑ

 

- vscode cmd์— connector ์„ค์น˜ 

bash
๋‹ซ๊ธฐ
pip install mysql-connector-python

 

 

 

 

config.py ์ž‘์„ฑ

 

 

 

 

 

์ปจํŠธ๋กค+s๋กœ ํŒŒ์ผ ์ €์žฅ์‹œํ‚ค๊ณ , flask run ํ•˜๊ธฐ

 

 

 

 

์ด ํ™”๋ฉด์ด ๋œจ์ง€ ์•Š์œผ๋ฉด ํŒŒ์ผ ์ €์žฅ์„ ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ž

 

 

 

 

 

 

 

๋‹ค์‹œ Postman์œผ๋กœ ๋Œ์•„์™€ Send๋ฅผ ๋ˆ„๋ฅด๋ฉด success๊ฐ€ ๋œฌ๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ์ฝ”๋“œ์— ์˜คํƒ€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž.