REST API
REST API๋ ์น์์ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ์์ฒญ-๋ฐํ ๋ฐฉ์์ด๋ค. HTTP๋ฉ์๋์ URI(URL)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
1. Method
= ๋์ฌ(HTTP ๋ฉ์๋): ์ด๋ค ํ์(Method)๋ฅผ ํ ๊ฒ์ธ์ง.
REST API์ HTTP ๋ฉ์๋๋ ์์์ ๋ํด ์ด๋ค ์์ ์ ์ํํ ์ง ๋ํ๋ด๋ฉฐ CRUD ์ฐ์ฐ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๋ค.
CRUD๋?
- Create: ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ
- HTTP ๋ฉ์๋: POST
- ์์: POST /users (์๋ก์ด ์ฌ์ฉ์ ์ ๋ณด ์์ฑ)
- Read: ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ์ฌ์ฉ
- HTTP ๋ฉ์๋: GET
- ์์: GET /users (๋ชจ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํ), GET /users/{id} (ํน์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํ)
- Update: ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฌ์ฉ
- HTTP ๋ฉ์๋: PUT ๋๋ PATCH
- ์์: PUT /users/{id} (ํน์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฒด ์์ ), PATCH /users/{id} (ํน์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ถ๋ถ ์์ )
- Delete: ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉ
- HTTP ๋ฉ์๋: DELETE
- ์์: DELETE /users/{id} (ํน์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ญ์ )
2. URI(URL)
= ๋ช ์ฌ(๋ชฉ์ ์ด): ์ด๋ค ์์(Resource)์ ๋ํด
URI๋ ํน์ ์์์ ์ ๊ทผํ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ฉฐ RESTfulํ๊ฒ ์ค๊ณ๋๋ค. URI๋ ์ฃผ๋ก ๋ค ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋๋ค.
- Collection
- ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์๋ฅด๋ฅผ ํฌํจํ๋ ์์ ๋๋ ํ ๋ฆฌ. ์๋ฅผ๋ค์ด ์ฌ๋ฌ์ฌ๋๋ค์ ํฌํจํ๋ People
- ์์: '/people'
- Document
- Collection ๋ด์ ๋จ์ผ ๋ฆฌ์์ค.
- ์์: '/people/12' → ID๊ฐ 12์ธ ํน์ ์ฌ๋
- Store
- Document์ ํน์ ํํ๋ก, ํ์ ๋ฆฌ์์ค ๋๋ ๋ค๋ฅธ ํํ
- ์์: '/people/12/favorites'
- Controller
- CRUD์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋ ์ธ์ ์ถ๊ฐ์ ์ธ ํ์๋ฅผ ๋ช ์ํ๊ธฐ ์ํด ์ฌ์ฉ. ํ์์ ๋ฐ๋ผ URI ๋ง์ง๋ง์ ์ถ๊ฐํ๋ค.
- ์์: '/people/12/register' (ํ์๋ฑ๋ก) → ID๊ฐ 12์ธ ์ฌ๋์ ๋ํ ํ์๋ฑ๋ก. POST ๋ฉ์๋ ์ฌ์ฉ์ ๊ฐ์กฐ)
3. URI(Path)์ ๋ค์ด๊ฐ๋ ๋ณ์(๊ฐ๋ณ์์)
URI์๋ ์์์ ๋ํ ๋ณ์๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ด๋ Path Variable ๋๋ Query Parameter๋ก ํํ๋๋ค.
- Path Variable: '/hellow/world'์ ๊ฐ์ด ๊ฒฝ๋ก์ ์ผ๋ถ๋ก ํฌํจ
- Query Parameter: '/hellow?next=world'์ ๊ฐ์ด URI ๋์ ๋ถ๋ ํ์
4. Representation of Resource
=ํํ: REST API๋ ์ฃผ๋ก JSON (JavaScript Object Notation), XML ๋ฑ์ ํฌ๋งท์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํํํ๋ฉฐ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋๋ค.
5. HTTP Response Status / Response Code
- 1XX: ์ ๋ณด ์ ๊ณต
- 2XX: ์ฑ๊ณต (์: 200 OK, 201 Created)
- 4XX: ํด๋ผ์ด์ธํธ ์ค๋ฅ (์: 400 Bad Request, 404 Not Found)
- 5XX: ์๋ฒ ์ค๋ฅ (์: 500 Internal Server Error)
GraphQL
REST API๋ ๊ฐ ๋น์ง๋์ค ๋๋ฉ์ธ๋ง๋ค ์๋ง์ API ๋ค์ ์ผ์ผํ ๋ง๋ค์ด์ผํ๋ ๋จ์ ์ด ์๋ค. (API ์ธ๊ฐ)
๋ฐ๋ผ์ ๋ค์ํ ๋๋ฉ์ธ๊ณผ ๋ฉ์๋, ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด ๋ฐํ. ์ด๋ก ์ธํด ์์ฒ๊ฐ์ ๋ฉ์๋์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ ์ ์์.
→ GraphQL์ ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ช ์์ ์ผ๋ก ์์ฒญ ๊ฐ๋ฅ. ๋ฐ๋ผ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ง ์๋ฒ ์ธก์์ ๋ฏธ๋ฆฌ ๊ฒฐ์ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ ๐
GraphQL์ ์ด์
- ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ์ ๋ณด๋ง ์ ํ์ ์ผ๋ก ๊ฐ์ ธ๊ฐ ์์๋ค
- ์ด๋ฅผ ํตํด API ์์ฒญ๊ณผ ์๋ต์ ํจ์จ์ฑ์ด โฌ๏ธ
- ์์๋ก ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฌ์ฉ์ ์ ๋ณด์ ํด๋น ์ฌ์ฉ์์ ์น๊ตฌ ๋ชฉ๋ก๋ง ํ์ํ ๋ ๊ทธ ์ ๋ณด๋ง ์์ฒญํ ์ ์๋ค.
+@
์น ๋ธ๋ผ์ฐ์ , ํฌ์คํธ๋งจ, CUI ์ฐจ์ด์
์น ๋ธ๋ผ์ฐ์ : ๊ธฐ๋ณธ์ ์ผ๋ก GET ๋ฐฉ์์ ์์ฒญ๋ง ๊ฐ๋ฅ
ํฌ์คํธ๋งจ: ๋ค์ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ POST, PUT, DELETE ๋ฑ์ ์์ฒญ์ ํ ์คํธํ ๋ ์ ์ฉ
CUI: Command Line Interface๋ฅผ ํตํด ํ ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์น ์๋ฒ(WS)์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS) (0) | 2024.08.18 |
---|---|
์น ๊ฒ์ ์์ง(๊ตฌ๊ธ๊ณผ SEO) ๋ฐ ์น ์ฑ๋ฅ ์งํ (0) | 2024.08.18 |
์น ์๋ฒ ์ฃผ์ ๋ณํ: DNS (Domain Name System) (0) | 2024.08.18 |
์น ๋ธ๋ผ์ฐ์ - Render ์ ์ฐจ (0) | 2024.08.18 |
์น์ ๋ณธ์ง์ ์๋ฏธ์ ์ํคํ ์ฒ (0) | 2024.08.18 |