RestFul API

Flask(ํ”Œ๋ผ์Šคํฌ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MySQL DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •(PUT)ํ•˜๋Š” API ๋งŒ๋“ค๊ธฐ

567Rabbit 2024. 5. 21. 16:41

 

์ดˆ๊ธฐ DB ๋ฐ์ดํ„ฐ

 

 

 

 

 

 

( recipes/2 )  ์ฆ‰, id = 2์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. 

 

Body ๋ฅผ ํด๋ฆญํ•˜๊ณ  raw(๋‚  ๊ฒƒ์˜ ๋ฐ์ดํ„ฐ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ Jsonํ˜•์‹์œผ๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

 

 

 

 

 


DB์™€ postman์„ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•œ๋‹ค

 

 

https://codebunny99.tistory.com/87

 

MySQL DB ์„ค๊ณ„, ์—ฐ๋™ํ•˜์—ฌ RestFul API๋กœ GETํ•˜๊ธฐ(DB์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” API)

Postman   GET์˜ Request๋Š” Query String(Query Parameters)์„ ์‚ฌ์šฉํ•œ๋‹ค- offset : 0- limit : 25     DB ์„ค๊ณ„ํ•˜๊ธฐ ์ฝ”๋“œ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•ด์„œ ์ž…๋ ฅํ•œ๋‹ค)-- recipe_db ์—๋งŒ ์ „์šฉ์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜

codebunny99.tistory.com

 

 

 

 

VSCode

 

 

app.py ์ž‘์„ฑํ•˜๊ธฐ

 

 

 

<int : recipe_id> ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ Flask(ํ”Œ๋ผ์Šคํฌ) ๋ผ๊ณ  ํ•œ๋‹ค

 

 

Flask๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ๋Ÿ‰ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ API๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. Flask์—์„œ๋Š” URL ๊ฒฝ๋กœ๋ฅผ ๋ผ์šฐํŠธ(route)๋ผ๊ณ  ํ•˜๋ฉฐ, ํŠน์ • ๊ฒฝ๋กœ๋กœ ์ ‘๊ทผํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 



recipe.py ์ž‘์„ฑํ•˜๊ธฐ

 

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeResource(Resource):

    def put(self, recipe_id):

            # 1. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค
            print(recipe_id)

            data = request.get_json()  # ์•„๋ž˜ record ์—์„œ ์“ฐ์ธ๋‹ค 

            # 2. DB์— ์ˆ˜์ •ํ•œ๋‹ค.
            try :
                connection = get_connection()

                query = '''update recipe
                            set name = %s, 
                                description = %s, 
                                num_of_servings = %s , 
                                cook_time = %s , 
                                directions = %s
                            where id = %s;'''

                record = (data['name'],
                          data['description'],
                          data['num_of_servings'],
                          data['cook_time'],
                          data['directions'],
                          recipe_id)

                cursor = connection.cursor()
                cursor.execute(query, record)

                connection.commit() #commitํ•˜์ง€ ์•Š์œผ๋ฉด DB์— ๋ฐ˜์˜๋˜์ง€ ์•Š๊ณ  rollback๋œ๋‹ค

                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'}

 

 

ํŒŒ์ผ์„ ์ €์žฅํ•˜์—ฌ vscode ํ„ฐ๋ฏธ๋„ cmd ์ฐฝ์— flask run ํ•˜๊ณ ,

 

 

send๋ฅผ ๋ˆ„๋ฅด๋ฉด "result" : "success" ๋ผ๊ณ  ๋œฌ๋‹ค.

 

 

 

 

DB์—์„œ๋„ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.