REST๋ Representational State Transfer๋ก, ๋คํธ์ํฌ ์์์ Client์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์ ์ค ํ๋์ ๋๋ค.
1) HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ
2) HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ.
HTTP ํ๋กํ ์ฝ?
HTTP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ ์ํ ํต์ ๊ท์น ์ธํธ(ํ๋กํ ์ฝ).
์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ (๋ง์น ํฌ๋กฌ๊ณผ ์ฌํ๋ฆฌ)๊ฐ ์น ์๋ฒ์ HTTP ์์ฒญ์ ์ ์กํ๊ณ , ์น ์๋ฒ๋ HTTP ์๋ต์ผ๋ก ์๋ตํจ.
GET
(์น ์ฌ์ดํธ์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ๋) / PUT
(์ผ๋ถ ์ ๋ณด๋ฅผ ์
๋ ฅ? ์ ์กํ ๋)operation | HTTP method |
---|---|
Create (์์ฑ) | POST |
Read (์กฐํ) | GET |
Update (์์ ) | PUT |
Delete (์ญ์ ) | DELETE |
Head (header ์ ๋ณด ์กฐํ) | HEAD |
phonenumbers
์ ์์์ ํํ์ผ๋ก ์ ํ๋ค.students
๊ฐ ํ์ ๋ฒํธ๋ฅผ ๋ํ๋ด๋ ์์์ ํํ์ด๋ผ๋ฉด, URI๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ ์ ์๋ค. ๐ http://education.co.kr/students/20
์์ URI๋ฅผ ํตํด, `students`๊ฐ 20์ธ ์์์ ์๋ณํ๊ณ ์๋ ๊ฒ์ด๋ค.
RESTful์ ์ผ๋ฐ์ ์ผ๋ก REST๋ผ๋ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๋ ์น ์๋น์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, REST๋ผ๋ ์น ํต์ ๋ฐฉ์์ ๋ฐ๋ผ์ ์ป๋ ์ด๋์ ๋ฌด์์ผ๊น์..?
ํ์ฅ์ฑ
HTTP๊ฐ ๋คํธ์ํฌ ํต์ ์ ํ์ค์ผ๋ก ์ฑํ๋์ด ์๋๋ฐ, RESTful API๋ HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ์ด๋ค ํ๋ซํผ์ด๋ , ์ด๋ค ์ธ์ด๋ HTTP๋ฅผ ์ง์ํ๋ค๋ฉด ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ก์จ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํธ ์์ฉ์ด ํจ์ฌ ๊ฐ๋จํ๊ณ ํธ๋ฆฌํด์ง๋๋ค.
๊ฐ๊ฒฐ์ฑ๊ณผ ๊ฐ๋ ์ฑ
RESTful API๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ๋ค๋ฃจ๊ณ , ์์์ ๊ณ ์ ํ URI๋ฅผ ํตํด ์๋ณ๋ฉ๋๋ค. ์ด๋ก์จ ๊ฐ๋ฐ์๋ค์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
๊ฒฝ๋์ฑ
๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก JSON์ด ์ฃผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ๋น ๋ฅธ ์๋ต ์๊ฐ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Swagger ๋ REST API๋ฅผ ์ค๊ณ, ๋น๋, ๋ฌธ์ํ ๋ฐ ์ฌ์ฉํ๋ ๋ฐ ๋์์ด ๋๋ OpenAPI ์ฌ์์ ์ค์ฌ์ผ๋ก ๊ตฌ์ถ ๋ ์คํ ์์ค ๋๊ตฌ ์ธํธ์ ๋๋ค.
FastAPI์์, ์๋์ผ๋ก ์์ฑ๋ ์น ์ API ๋ฌธ์๋ฅผ ๋ณธ ์ ์ด ์์ง ์๋์..?
๊ทธ๊ฒ์ด ๋ฐ๋ก, Swagger์ ๋๋ค.
Swagger๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋จ์ํฉ๋๋คโฆ๐
์ ์ฉํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ or ๋ ๋จน๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์..
FastAPI๊ฐ ์๋ ๋ค๋ฅธ ์น ํ๋ ์์ํฌ์์๋ ์ฝ๋ ๋ช ์ค์ด๋ฉด Swagger UI๋ฅผ ์์ฑํ ์ ์๋ค๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ ๋ฒ์ ๊ณต๋ถํ์๋ FastAPI์ ๊ฒฝ์ฐ, ์์ฒด์ ์ผ๋ก ์ด๋ฅผ ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ ํ์๋ ์์ด ๊ทธ์ ์ฌ์ฉ๋ง.. ํ๋ฉด ๋ฉ๋๋ค.
ํ ์คํธ ํ ์ ์๋ UI๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์
Swagger UI์์๋ ์ง์ ์ ๋ ฅ๋ ํ์ฌ ์ค๊ณํ ๋๋ก ์ถ๋ ฅ์ด ๋์ค๋ ์ง ํ์ธํด ๋ณผ ์ ์์ต๋๋ค. ๊ตณ์ด html template์ ๋ง๋ค์ด ์ฐ๊ฒฐํ์ง ์์๋ ์ด docs๋ฅผ ํ์ฉํ๋ค๋ฉด, ์น์ ํตํ ๋ชจ๋ธ ๋ฐ๋ชจ ๋ฑ์ ์ฝ๊ฒ ๊ตฌํํด๋ณผ ์ ์๋ ๊ฒ์ ๋๋ค.
1๏ธโฃ HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ
2๏ธโฃ HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ.
์์ REST ๋ด์ฉ์ ์ฐธ๊ณ ํ๋ฉด์ ์ดํดํด๋ณด๋๋ก ํ์.
URI์ย HTTPย Method๊ฐย ๋ค์ด๊ฐ๋ฉดย ์๋๋ค.
ex) GET /members/delete/1
-> DELETE /members/1
URI์ย ํ์์ย ๋ํย ๋์ฌย ํํ์ดย ๋ค์ด๊ฐ๋ฉดย ์๋๋ค.
ex) GET /members/show/1
-> GET /members/1
ex) GET /members/insert/2
-> POST /members/2
๊ฒฝ๋กย ๋ถ๋ถย ์คย ๋ณ์๋ย ์ ์ผํย ๊ฐ์ผ๋กย ๋์ฒดํ๋ค.
ex) id=12์ธ student๋ฅผ ์ญ์ ํ๋ route: DELETE /students/12
์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
ํ์ดํ(- )์ URI ๊ฐ๋ ์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉ
๋ฐ์ค(_ )์ URI์ ์ฌ์ฉํ์ง ์๋๋ค.
URI ๊ฒฝ๋ก์๋ ๋๋ฌธ์๋ณด๋ค ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ค.
ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
GET
์ผ๋ก๋ง ์ฒ๋ฆฌํ๋ API โ๋ชฉ์
๊ตฌ์ฑ
API๋ผ๋ ๋ฆฌ๋ชจ์ฝ์ด ์๋ค๋ฉด, ๊ฐ ๋ฆฌ๋ชจ์ฝ์ ๋ฒํผ ๊ธฐ๋ฅ์ ์ค๋ช
ํด ๋์ ๋ฌธ์๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ๊ฐ url์ด ์
๋ ฅ๋์์ ๋, ์ด๋ ํ HTTP Method(POST, GET, PUT, DELETE)๊ฐ ์คํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
API ํ ์คํธ โ ์ /์ถ๋ ฅ ๊ฐ๋ฅ
์์) Stable Diffusion text-to-image ๋ชจ๋ธ์ ๋ค๋ฃฌ ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋กฌํํธ ์ ๋ ฅํ๋ ๋ชจ์ต
๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ ๋ชจ์ต
FastAPI for Machine Learning: Live coding an ML web application.
swagger
์น ํ๋ฉด (http://127.0.0.1:8001)
์คํ ์ฝ๋
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Name": "ShinYeeun"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
Swagger UI (http://127.0.0.1:8001/docs)
์ ์ฒด์ ์ธ ํ๋ฉด
Swagger UI์์ ์ ๋ ฅ ํ ์คํธํ๋ ๋ชจ์ต
์ค์ ๋ก ์
๋ ฅ๋ ๊ฐ์ด ์น์ ๋์์ง๋ ๋ฏ ๋ณด์ธ๋ค.
Reference
ํ์์ฑ
๊ธฐ๋ฅ์ ํน์ง