API ๋ช ์ธ์ ์์ฑ๋ฒ๊ณผ ํ์์ฑ์ ๋ํ์ฌ
1. API ๋ช ์ธ์ ์ ์
API ๋ช ์ธ์(API Documentation)๋ ๊ฐ๋ฐ์๋ค์ด API๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ํ ๋ฌธ์์ด๋ค.
API์ ์๋ํฌ์ธํธ, ์์ฒญ ๋ฐ ์๋ต ํ์, ์ธ์ฆ ๋ฐฉ์ ๋ฑ์ ์์ธํ๊ฒ ์ค๋ช ํ๋ค.
2. API ๋ช ์ธ์๊ฐ ์ ํ์ํ ๊น?
API ๋ช ์ธ์๋ ๋จ์ํ ๋ฌธ์๊ฐ ์๋๋ผ, ๋ฐฑ์๋์ ํ๋ก ํธ์๋, ์ธ๋ถ ๊ฐ๋ฐ์ ๊ฐ์ ์ํํ ํ์ ์ ์ํ ํ์ ์์์ด๋ค.
โ ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์
- API๋ฅผ ์ฌ์ฉํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ์ธ๋ถ ๊ฐ๋ฐ์๊ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์์๊ฒ ์ผ์ผ์ด ์ง๋ฌธํ ํ์ ์์ด ๋ช
์ธ์๋ฅผ ๋ณด๊ณ ์ํ๋ ๊ธฐ๋ฅ์
๊ตฌํํ ์ ์๋ค. - ํ ๋ด์์๋ ์ญํ ์ ๋ถ๋ฆฌํ๊ณ , API์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ดํดํ๋ ๋ฐ ๋์์ ์ค๋ค.
โ ๊ฐ๋ฐ ํจ์จ์ฑ ํฅ์
- ๋ช ์ธ์๊ฐ ์์ผ๋ฉด API ๊ตฌํ ์ค ํผ์ ์ ๋ฐฉ์งํ๊ณ , API ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋ค.
- ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋ณ๋ ฌ๋ก ๊ฐ๋ฐ์ ์งํํ ์ ์์ด ๊ฐ๋ฐ ์๋๊ฐ ํฅ์๋๋ค.
โ ์ ์ง๋ณด์์ ํ์ฅ์ฑ
- ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก API๊ฐ ๋ง์์ง๊ณ ๋ณต์กํด์ง๋๋ฐ, ๋ช ์ธ์๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ์๋ก์ด ํ์์ด ํฉ๋ฅํด๋ API ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์์ด ์จ๋ณด๋ฉ์ด ์ํํด์ง๋ค.
โ API ํ ์คํธ ๋ฐ ๋๋ฒ๊น ์ฉ์ด
- ๋ช ์ธ์๊ฐ ์์ผ๋ฉด API๋ฅผ ํ ์คํธํ ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋์ง ๋ช ํํ ์ ์ ์๋ค.
- Postman์ด๋ Swagger ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด API ํ ์คํธ๋ฅผ ์๋ํํ ์ ์๋ค.
3. API ๋ช ์ธ์ ์์ฑ๋ฒ
API ๋ช ์ธ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง, ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํญ๋ชฉ์ ํฌํจํด์ผ ํ๋ค.
๐น ๊ธฐ๋ณธ ์ ๋ณด
ํญ๋ชฉ | ์ค๋ช |
API ์ด๋ฆ | API์ ์ญํ ๊ณผ ๋ชฉ์ ์ค๋ช |
๋ฒ์ | API์ ๋ฒ์ ์ ๋ณด (ex: v1, v2) |
Base URL | API์ ๊ธฐ๋ณธ ์ฃผ์ (ex: `https://api.example.com/v1`) |
์ธ์ฆ ๋ฐฉ์ | API ์์ฒญ ์ ํ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ (ex: JWT, OAuth2) |
๐น ์๋ํฌ์ธํธ(Endpoint) ๋ช ์ธ
๊ฐ API์ ์๋ํฌ์ธํธ์ ๋ํ ์์ธ ์ค๋ช ์ด ํ์ํ๋ค.
๐ ๊ธฐ๋ณธ ๊ตฌ์กฐ
[HTTP ๋ฉ์๋] ์๋ํฌ์ธํธ ์ค๋ช
- URL: /example
- Method: GET
- ์ค๋ช : Example ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ API
๐ ์์
[GET] /api/travel/recommendations
- ์ค๋ช : ์ฌํ์ง ์ถ์ฒ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ API
- ์์ฒญ ํ๋ผ๋ฏธํฐ:
- location (string, ํ์): ์ฌํ์ง ์ง์ญ (์: "์์ธ")
- category (string, ์ ํ): ์ถ์ฒ ์นดํ ๊ณ ๋ฆฌ (์: "๋๋๋งํฌ", "๋ง์ง")
- ์๋ต ์์:
{
"status": 200,
"data": [
{
"id": 1,
"name": "๊ฒฝ๋ณต๊ถ",
"category": "๋๋๋งํฌ",
"rating": 4.8
},
{
"id": 2,
"name": "๊ด์ฅ์์ฅ",
"category": "๋ง์ง",
"rating": 4.6
}
]
}
๐น ์์ฒญ(Request) ๋ช ์ธ
API ์์ฒญ์ ๋ณด๋ผ ๋ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ํด์ผ ํ๋ค.
ํญ๋ชฉ | ์ค๋ช |
HTTP ๋ฉ์๋ | GET, POST, PUT, DELETE ์ค ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง |
URL | API์ ์๋ํฌ์ธํธ |
ํค๋(Headers) | ์์ฒญ ์ ํ์ํ ํค๋ ์ ๋ณด (ex: `Authorization: Bearer <token>`) |
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(Query Parameters) | GET ์์ฒญ ์ URL์ ํฌํจ๋๋ ๊ฐ |
Body | POST, PUT ์์ฒญ ์ ์ ๋ฌํ๋ JSON ๋ฐ์ดํฐ |
๐น ์์ฒญ ์์ (POST ์์ฒญ)
[POST] /api/travel/schedule
- ์ค๋ช : ์ฌ์ฉ์์ ์ฌํ ์ผ์ ์ ์ ์ฅํ๋ API
- ์์ฒญ ํค๋:
- Authorization: Bearer {ํ ํฐ}
- ์์ฒญ ๋ฐ๋:
{
"user_id": 123,
"destination": "๋ถ์ฐ",
"start_date": "2025-03-01",
"end_date": "2025-03-05"
}
๐น ์๋ต(Response) ๋ช ์ธ
API์ ์๋ต ๊ตฌ์กฐ๋ฅผ ์์ธํ๊ฒ ์ ์ํ๋ค.
ํญ๋ชฉ | ์ค๋ช |
HTTP ์ํ ์ฝ๋ | ์์ฒญ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ (ex: 200, 400, 500) |
์๋ต ๋ฐ์ดํฐ ํ์ | JSON, XML ๋ฑ ์๋ต ํ์ |
์๋ต ์์ | ์ค์ ์๋ต ์์ ํฌํจ |
๐น ์๋ต ์์
# json
{
"status": 200,
"message": "์ผ์ ์ด ์ ์ฅ๋์์ต๋๋ค.",
"data": {
"schedule_id": 9876,
"user_id": 123,
"destination": "๋ถ์ฐ",
"start_date": "2025-03-01",
"end_date": "2025-03-05"
}
}
๐น ์๋ฌ ์๋ต
API ์ฌ์ฉ ์ค ๋ฐ์ํ ์ ์๋ ์๋ฌ ์ฝ๋์ ๋ฉ์์ง๋ฅผ ์ ์ํ๋ค.
์ํ ์ฝ๋ | ์ค๋ช |
200 | ์ฑ๊ณต |
400 | ์๋ชป๋ ์์ฒญ (ํ์ ํ๋ผ๋ฏธํฐ ๋๋ฝ ๋ฑ) |
401 | ์ธ์ฆ ์คํจ (ํ ํฐ ๋ง๋ฃ ๋ฑ) |
403 | ์ ๊ทผ ๊ถํ ์์ |
404 | ๋ฆฌ์์ค ์์ |
500 | ์๋ฒ ๋ด๋ถ ์ค๋ฅ |
๐น ์๋ฌ ์๋ต ์์
# json
{
"status": 400,
"error": "Bad Request",
"message": "ํ์ ํ๋ผ๋ฏธํฐ 'location'์ด ๋๋ฝ๋์์ต๋๋ค."
}
4. API ๋ช ์ธ์ ์์ฑ ๋๊ตฌ
API ๋ช ์ธ์๋ฅผ ์ฝ๊ฒ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ๋ค์ด ์๋ค.
โ Swagger (OpenAPI)
- ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ API ๋ฌธ์ํ ๋๊ตฌ
- API ์์ฒญ์ ์ง์ ์คํํ ์ ์์ด ํ ์คํธ๊ฐ ์ฉ์ด
โ Postman
- API ํ ์คํธ ๋ฐ ๋ฌธ์ํ ๊ธฐ๋ฅ ์ ๊ณต
- API ๋ช ์ธ์๋ฅผ ๊ณต์ ํ๊ณ ํ์ ๊ฐ๋ฅ
โ Stoplight
- UI ๊ธฐ๋ฐ์ผ๋ก API ๋ฌธ์๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์
5. ๊ฒฐ๋ก
API ๋ช
์ธ์๋ ๊ฐ๋ฐ ํจ์จ์ฑ๊ณผ ํ์
์ ๋์ด๋ ์ค์ํ ๋ฌธ์์ด๋ค.
๋ช
ํํ API ๋ช
์ธ์๋ฅผ ์์ฑํ๋ฉด ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์์ผ๋ฉฐ, ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์๋ค.
๋ฐ๋ผ์, ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ API ๋ช
์ธ์๋ฅผ ์ฒ ์ ํ ์์ฑํ๋ ๊ฒ์ด ํ์์ ์ด๋ค!
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250219] Json Web Token์ ๋ํ์ฌ,,, (0) | 2025.02.19 |
---|---|
[250217] ์ธ์ฆ(Authentication)๊ณผ ๊ถํ(Authorization) (0) | 2025.02.17 |
[250210] Django Admin ์ ๋ฆฌ~ (1) | 2025.02.10 |
[250205] Postman?? (1) | 2025.02.05 |
[250205] CRUD ์์ธ ์ ๋ฆฌ~ (0) | 2025.02.05 |