RestFul API

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

567Rabbit 2024. 5. 21. 16:18

๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

 

 

 

 

 

 

 

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):
    
    # ํŠน์ • id์˜ ๋ ˆ์‹œํ”ผ ๋ถˆ๋Ÿฌ์˜ค๋Š” API
    def get(self, recipe_id):
        
        # 1. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค
        print(recipe_id)
        
        # 2. DB๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค
        try:
            connection = get_connection()
            print('์ปค๋„ฅ์…˜ ์‹คํ–‰')
            
            query = '''SELECT * FROM recipe WHERE id = %s;'''
            
            record = (recipe_id,) # ํŠœํ”Œ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ฝค๋งˆ ๋„ฃ์–ด์ค€๋‹ค
            
            cursor = connection.cursor(dictionary=True)
            print('์ปค์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์„ฑ๊ณต')
            
            cursor.execute(query, record)
            print('์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰')            
            
            result_list = cursor.fetchall()
            print(result_list)
            
            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 ์—๋Ÿฌ
        
        # 3. ์‘๋‹ตํ•  ๋ฐ์ดํ„ฐ๋ฅผ json์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์‘๋‹ตํ•œ๋‹ค
        for row in result_list:
            row['createdAt'] = row['createdAt'].isoformat()
            row['updatedAt'] = row['updatedAt'].isoformat()
            
            
        # ๊ฒฐ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
        if not result_list:
            return {'result': 'fail', 'error': 'ํ•ด๋‹น ์•„์ด๋””๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.'}, 404

        return {'items': result_list[0], 'result': 'success'}

 

 

DB์— ์—†๋Š” id๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด "ํ•ด๋‹น ์•„์ด๋””๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" ๋ผ๋Š” ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋œจ๊ฒŒ ํ•˜์˜€๋‹ค.

 

 

๋ชจ๋“  ํŒŒ์ผ์„ ์ €์žฅํ•˜์—ฌ vscode ํ„ฐ๋ฏธ๋„ cmd ์ฐฝ์— flask run ํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

# ๊ฒฐ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ