hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 78 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 78

iihye_ 2023. 1. 11. 18:25

๐ŸŒŒ ๊ฐœ๋ณ„ํ•™์Šต


[3-2] FastAPI 2

1. FastAPI ๊ธฐ๋ณธ ์ง€์‹

1) Path Parameter

(1) ID๊ฐ€ 402์ธ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

- /users/402

- ์„œ๋ฒ„์— 402๋ผ๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ

(2) Path๋กœ ๋„˜๊ธด ๊ฐ’์ด ์—†์œผ๋ฉด -> 404 Error ๋ฐœ์ƒ

(3) Resource๋ฅผ ์‹๋ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

(4) ์‹ค์Šต

- 02_path_parameter.py ์ƒ์„ฑ

- /users/1 ์ ‘๊ทผ

- console log๋กœ ํ™•์ธ

 

2) Query Parameter

(1) ID๊ฐ€ 402์ธ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

- /users?id=402

- API ๋’ค์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ(Key, Value ์Œ)๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ

(2) Query์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด -> ๋นˆ ๋ฆฌ์ŠคํŠธ ๋‚˜์˜ด -> error handing ํ•„์š”

(3) ์ •๋ ฌ, ํ•„ํ„ฐ๋ง์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

(4) ์‹ค์Šต

- 03_query_parameter.py ์ƒ์„ฑ

- /items ์ ‘๊ทผ

- /items/?skip=0&limit=1

- /items/?skip=20

- console log๋กœ ํ™•์ธ

items ๋’ค์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ  ๋ฐ”๋กœ query ๋ฌธ์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์Šฌ๋ž˜์‹œ๋ฅผ ๋ถ™์ธ ์ฃผ์†Œ๋กœ redirect ๋œ๋‹ค

 

3) Optional Parameter

(1) ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ Optional(์„ ํƒ์ )์œผ๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

(2) typing ๋ชจ๋“ˆ์˜ Optional ์‚ฌ์šฉ

(3) ์‹ค์Šต

- 04_optional_parameter.py

- /items/1 ๋กœ ์ ‘๊ทผ

- /items/1?q=boostcamp-ai-tech ๋กœ ์ ‘๊ทผ

 

4) Request Body

(1) ํด๋ผ์ด์–ธํŠธ์—์„œ API๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ

- Client => API : Request Body

- API => Client : Response Body

(2) Request Body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด POST method ์‚ฌ์šฉ

- URL์€ GET method๋กœ ์ „๋‹ฌ

(3) ์‹ค์Šต

- 05_request_body.py ์ƒ์„ฑ

- /docs ์—์„œ request body ์‹คํ–‰ => Code 200 ์ •์ƒ ์ž‘๋™

- tax์— float์ด ์•„๋‹Œ string์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ => Code 422 ์˜ค๋ฅ˜ ๋ฐœ์ƒ (Validation Check)

 

5) Response Body

(1) API์˜ Response๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ผ ๋•Œ

- Client => API : Request Body

- API => Client : Response Body

(2) Decorator์˜ response_model ์ธ์ž๋กœ ์ฃผ์ž…

(3) @app.post

- Output data๋ฅผ ์ •์˜์— ๋งž๊ฒŒ ๋ณ€ํ˜•

- ๋ฐ์ดํ„ฐ Validation

- Response์— ๋Œ€ํ•œ Json Schema ์ถ”๊ฐ€

- ์ž๋™์œผ๋กœ ๋ฌธ์„œํ™”

(3) ์‹ค์Šต

- 06_response_body.py ์ƒ์„ฑ

- /docs ์—์„œ ์‹คํ–‰ํ•˜๋ฉด Request body์™€ Response body๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

 

6) Form, File

(1) Form(์ž…๋ ฅ) ํ˜•ํƒœ๋กœ ๋ฐ›๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

- python-multipart ์„ค์น˜ ํ•„์š”

(2) Request์˜ Form data์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด

(3) Python ellipsis : ํ•„์ˆ˜ ์š”์†Œ(Required)๋ฅผ ์˜๋ฏธ

- Form(...)

(4) ์‹ค์Šต

- 07_form.py, login_form.html ์ถ”๊ฐ€

- /login ์œผ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ login form ์ด ๋‚˜์˜ด

- ์ œ์ถœํ•œ username์ด ํ™”๋ฉด์— ํ‘œ์‹œ๋จ

(5) File์„ ์—…๋กœ๋“œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

- python-multipart ์„ค์น˜ ํ•„์š”

 

(6) ์‹ค์Šต

- 08_file.py ๋งŒ๋“ค๊ธฐ

- ํŒŒ์ผ ์„ ํƒ๊ณผ ์ œ์ถœ ๊ฐ€๋Šฅ

 

 

 



๐ŸŒŒ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜ค์ „ ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ ๋•Œ๋Š” ๋”ฑํžˆ ํฐ ์ด์Šˆ๋Š” ์—†์—ˆ์Œ..(ใ…Žใ…Ž) mmsegmentation ์ด์šฉํ•ด์„œ ํ•™์Šตํ• ๊ฑฐ๋ผ annotation ์ด๋ฏธ์ง€ ๋งŒ๋“œ๋Š”๋ฐ ์‹œ๊ฐ„์ด 6์‹œ๊ฐ„์ด๋‚˜ ๊ฑธ๋ฆฐ๋‹ค.... ์ด๋ฏธ์ง€ ๋งŒ๋“œ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์€ ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ๊ฐ•์˜ ๋“ฃ๊ธฐ..๋„ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š๋‹ค... ์˜คํ›„์—๋Š” ํฌํŠธํด๋ฆฌ์˜ค ํŠน๊ฐ• ๋“ค์—ˆ๋Š”๋ฐ ํ™•์‹คํžˆ ๊ธฐ์—…์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ฐ”์— ๋งž์ถ˜ ๋งž์ถคํ˜• ์ด๋ ฅ์„œ์™€ ์ž๊ธฐ์†Œ๊ฐœ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ํ”ผ์–ด์„ธ์…˜ ๋•Œ์—๋Š” ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ ๊ณต์œ  + ๋ช‡ ๊ฐ€์ง€ ์ด์Šˆ๋“ค์— ๋Œ€ํ•ด์„œ ๋…ผ์˜ํ–ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ์ค‘๊ฐ„ ํ”ผ๋“œ๋ฐฑ์ด ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์•„์„œ ์ด๋ฒˆ ์ฃผ ๋‚ด๋กœ ๋ชจ๋ธ ํ•™์Šต + ๋‹ค์Œ ์ฃผ์—๋Š” ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๋ชจ๋ธ upgrade ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด์•ผ๊ธฐํ–ˆ๋‹ค(!!!)

728x90
Comments