RestFul API 22

JWT(์–‘๋ฐฉํ–ฅ) ์•”ํ˜ธํ™” ๋กœ๊ทธ์ธ API ๋งŒ๋“ค๊ธฐ

๋กœ๊ทธ์ธ API ๋งŒ๋“ค๊ธฐ     app.py์— ์‚ฝ์ž… from resources.user import UserLoginResourceapi.add_resource( UserLoginResource, '/users/login')  app.py ํŒŒ์ผ์— ์ถ”๊ฐ€ from flask_jwt_extended import JWTManagerfrom config import Config# app = Flask(__name__) ์•„๋ž˜์— ์ถ”๊ฐ€# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹ํŒ…app.config.from_object(Config)# JWT ๋งค๋‹ˆ์ € ์ดˆ๊ธฐํ™”jwt = JWTManager(app)# api = Api(app) ์œ„์— ์ถ”๊ฐ€      user.py์— ์‚ฝ์ž… from utils import check_password #4์—์„œ ์‚ฝ์ž…from flas..

RestFul API 2024.05.22

JWT ์•”ํ˜ธํ™”(์ธ์ฆํ† ํฐ) ์‚ฌ์šฉํ•˜์—ฌ ํšŒ์›๊ฐ€์ž… API์— ์ ์šฉํ•˜๊ธฐ

https://codebunny99.tistory.com/93 MySQL DB์™€ Postman์„ ์—ฐ๋™ํ•˜์—ฌ ํšŒ์›๊ฐ€์ž… API ๋งŒ๋“ค๊ธฐ์ด๋ฉ”์ผ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ pip install email-validatorpip install passlibpip install psycopg2-binary   DB์™€ postman์„ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•œ๋‹ค  https://codebunnycodebunny99.tistory.com์œ„ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋จผ์ € ๋ณด๊ณ  ์˜จ๋‹ค.     ***** ์ค‘์š” ****** >  user_id๊ฐ€ ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ user_id๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.     JWT(JSON WEP TOKEN) ์•”ํ˜ธํ™” JWT๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, JWT_ACCE..

RestFul API 2024.05.22

MySQL DB์™€ Postman์„ ์—ฐ๋™ํ•˜์—ฌ ํšŒ์›๊ฐ€์ž… API ๋งŒ๋“ค๊ธฐ

ํšŒ์›๊ฐ€์ž… API ์ƒ์„ฑํ•˜๊ธฐ ์ด๋ฉ”์ผ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ pip install email-validatorpip install passlibpip install psycopg2-binary   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 ์—๋งŒ ์ „์šฉ์œผ๋กœ ์ ‘..

RestFul API 2024.05.22

Hashing ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์‹คํ–‰ํ•˜๊ธฐ : utils ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

Hashing ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Hashing์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”๋กœ,  - ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ๋ณต์›ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๋ถ„์•ผ์—์„œ ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค. - ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ, ๋””์ง€ํ„ธ ์„œ๋ช…, ๋ธ”๋ก์ฒด์ธ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.  vscode ํ„ฐ๋ฏธ๋„ cmd์—์„œ ์„ค์น˜ํ•˜๊ธฐpip install email-validatorpip install passlibpip install psycopg2-binary    SALT๋ฅผ config ํŒŒ์ผ์— ๋งŒ๋“ ๋‹ค. (SALT๋Š” random_state์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ, ๋…ธ์ถœ๋˜๋ฉด ํ•ดํ‚น๋  ์ˆ˜ ์žˆ๋‹ค.)SALT๋Š” ๋ณธ์ธ์ด ์›ํ•˜๋Š”๋Œ€๋กœ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค    utils.py ๋งŒ๋“ค๊ธฐfrom passlib.hash import pbkdf2_sha256f..

RestFul API 2024.05.22

Is_publish ์ปฌ๋Ÿผ์„ updateํ•˜์—ฌ "์ž„์‹œ ์ €์žฅ" ๊ธฐ๋Šฅ์˜ API ๋งŒ๋“ค๊ธฐ

is_publish๋ผ๋Š” ์ปฌ๋Ÿผ์€ 0์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜์Œ์„ ๋œปํ•˜๊ณ , 1์€ ๊ณต๊ฐœ๋˜์—ˆ์Œ์„ ๋œปํ•œ๋‹ค ๋”ฐ๋ผ์„œ /publish ๋ผ๋Š” path๋ฅผ ๋งŒ๋“ค์–ด์„œ is_publish ์ปฌ๋Ÿผ์„ 0๋˜๋Š” 1๋กœ ์—…๋ฐ์ดํŠธ ํ•˜์—ฌ ๊ณต๊ฐœ๋œ ๊ธ€๋กœ ๋งŒ๋“ค๊ฒƒ์ธ์ง€, ์•„๋‹Œ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ž„์‹œ์ €์žฅ ๊ธฐ๋Šฅ์„ API๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.     app.py ์ž‘์„ฑํ•˜๊ธฐ        recipe.py ์ž‘์„ฑํ•˜๊ธฐ from flask import requestfrom flask_restful import Resourcefrom mysql_connection import get_connectionfrom mysql.connector import Errorclass RecipePublishResource(Resource): def put(self, recipe_id):..

RestFul API 2024.05.21

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

์ดˆ๊ธฐ DB ๋ฐ์ดํ„ฐ     ( recipes/6 ) ์ฆ‰,  id = 6์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•œ๋‹ค.   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 ์ž‘์„ฑํ•˜๊ธฐ    ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ..

RestFul API 2024.05.21

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

์ดˆ๊ธฐ 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 ์—๋งŒ ์ „์šฉ์œผ๋กœ ์ ‘์†ํ•  ..

RestFul API 2024.05.21

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

๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ        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 ์ž‘์„ฑํ•˜๊ธฐ   ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ Flask(ํ”Œ๋ผ์Šคํฌ) ๋ผ๊ณ  ํ•œ๋‹ค   Flask๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ..

RestFul API 2024.05.21

MySQL DB๋ฅผ RestFul API์™€ ์—ฐ๊ฒฐํ•˜๊ณ  Postman์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ + Get API

Postman   GET์˜ Request๋Š” Query String(Query Parameters)์„ ์‚ฌ์šฉํ•œ๋‹ค- offset : 0- limit : 25     DB ์„ค๊ณ„ํ•˜๊ธฐ ์ฝ”๋“œ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•ด์„œ ์ž…๋ ฅํ•œ๋‹ค)-- 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์„ ๋งŒ๋“ ๋‹ค ..

RestFul API 2024.05.21

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

DB ์„ค๊ณ„ํ•˜๊ธฐ ์ฝ”๋“œ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•ด์„œ ์ž…๋ ฅํ•œ๋‹ค)-- 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 ํ•ด๋„ ๋œ๋‹ค.     ...  ..

RestFul API 2024.05.20