๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ๊ฒธ, ๋ฉ๋ชจ์ฉ์ผ๋ก ์์ฑํ ๊ธ ์ ๋๋ค :)
2xx Sucess ์์ฒญ ์ฑ๊ณต
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์
200 OK | ์ฒ๋ฆฌ ์ฑ๊ณต์ ๋ํ ๋ชจ๋ ์ํ ์ฝ๋๋ฅผ 200์ผ๋ก ์ฒ๋ฆฌํด๋ ์๊ด์ ์๋ค. ์ ์ฑ ์ค๊ณ ๋น์์์ ์ธ๋ถํ ํ ๊ฒ์ธ์ง, ๋ง๊ฒ์ธ์ง ์ ํ ๋ฌธ์ ์. ex) GET [/api/user/12] → 12๋ฒ ํ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์ฑ๊ณตํจ. |
201 Created | ์ฒ๋ฆฌ๋ฅผ ์ ์์ ์ผ๋ก ์ฑ๊ณตํ๊ณ , ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํจ. ๋ณดํต POST/PUT ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ์ฌ์ฉ๋จ. * http header์ content-location๋ฅผ ๋ช ์ํด, ์์ฑ๋ ๋ฆฌ์์ค ์์น๋ฅผ ์๋ ค์ฃผ๋ฉด ์ต๊ณ ! ex) POST [/api/user] → ์ ๊ท ํ์ ์ ๋ณด ์์ฑ ์๋ฃ |
202 Accepted | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ์์ด๋, ์๋ฒ๊ฐ ์์ง ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ์ง ๋ชป ํจ. ๋น๋๊ธฐ์ ํจ์(Callback, Polling ... )๋ฅผ ์์ฒญํ์๋ ์ฃผ๋ก ์ฌ์ฉํจ. ์ฒ๋ฆฌ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ผ๋จ, ์ ์ํ๋ค๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ. ์ ์ ์๋ฃ๋ง ์๋ ค์ฃผ๊ณ , ๊ฒฐ๊ตญ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ์๋ ค์ฃผ์ง ์์. ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด์ฃผ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ์ง์ผํ๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋, ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์ ๊ณตํด์ผํ๋ค. ex) ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ์ฃผ๋ฌธ ์์คํ ์๊ฐํ๊ธฐ. ์ฃผ๋ฌธ → ์ฃผ๋ฌธ ์๋ฃ (202) → ... ๋ฐฐ๋ฌ์ค ... → ๋ฐฐ๋ฌ ์๋ฃ (200) |
204 No Content | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ์์ด๋, ๋์ด์ ์ปจํ
์ธ ๋ ์ ๊ณตํ์ง ์์. ์ญ์ ์์ฒญ ์ฑ๊ณต์ ๋ฆฌํดํ๋ ์ํ์ฝ๋๋ก ์์ฃผ ์ฌ์ฉ. 200๊ณผ ์ฐจ์ด์ ์ด http์ body๊ฐ ๋ด๊ธฐ์ง ์์. ex) DELETE [ /api/user ] → ์ฑ๊ณต → ์ญ์ ํ๊ธฐ๋๋ฌธ์ ๋ฆฌํดํ ๋ฐ์ดํฐ ์์ |
3xx Redirect ๋ฆฌ๋ค์ด๋ ํธ
301 Moved Permanently | ์์ฒญํ ๋ฆฌ์์ค URI๊ฐ ๋ณ๊ฒฝ๋จ |
4xx
Client Error
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ ํจํ์ง ์์ ์๋ฒ๊ฐ ํด๋น ์์ฒญ์ ์ํํ์ง ์์์.
400 Bad Request | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ ํจํ์ง ์์ ์๋ฒ๊ฐ ์์ฒญ์ ์ํํ์ง ์์. request body, path, query → ์ ํจ์ฑ ๊ฒ์ฌ, ๋ฒ์, ํ์๊ฐ ๋ฑ์ ๋ฐ๋ผ ์๋ฌ ๋ฐ์ ์ค๋ฅ ๋ฐ์์ body์ ์ค๋ฅ ๋ฐ์ ์์ธ์ ๋ฐํ๋ ๊ฒ์ด ์ข๋ค. ex) POST [ /api/user ] ์ ๊ท ํ์ ์์ฑ → id ๊ฐ์ ์ ๋ ฅํ์ง ์์์ฑ post ์์ฒญํจ, GET [ /api/user?userIdx=12 ] → ์ ํจํ์ง ์์ query๋ฅผ ๋ณด๋์ ๊ฒฝ์ฐ *๊ฐ๋ฐ ์ ์ฑ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ |
401 Unauthorized ๋น์ธ์ฆ | ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์์
์ ์งํํ ์ ์์. *์ธ์ฆ๊ณผ ์น์ธ์ ๊ตฌ๋ถํด ์๊ฐํด์ผ ํ๋ค. ํนํ 403, 409 ์ฝ๋์ ์ฐ๊ฒฐ์ง์ด ์๊ฐํด๋ณด์. ์ธ์ฆ → ๊ถํ์ด ์๋์ง ์๋์ง ํ์ธํ๋ pre ์์ ๋จ๊ณ 401 ๊ถํ → ์ธ์ฆ์ ํด์ผ ์ด๋์ด ๊ถํ์ด ์๋์ง ์๋์ง ํ์ธ ๊ฐ๋ฅํจ 403 ์น์ธ → ์ธ์ฆ๋ฐ๊ณ , ๊ถํ์ ๋ด์ ์์ผ๋ฉด ์น์ธ์ด๊ณ , ์์ผ๋ฉด ์งค |
403 Forbidden ๊ถํ์ด ์์ | ํด๋ผ์ด์ธํธ๊ฐ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ์์
์ ์งํํ ์ ์์. ์ ๊ทผ ๊ถํ์ด ์๋ค๊ณ ์ดํดํ๋ฉด ๋จ. ex) ๊ด๋ฆฌ์ ํ์ด์ง์ธ๋ฐ ์ผ๋ฐ ํ์์ด ์์ฒญํ ๊ฒฝ์ฐ |
404 Not Found ์์์ด ์์ | ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์์์ด ์กด์ฌํ์ง ์์. ๊ฒฝ๋ก(url), ์์(json, img ๋ฑ)์ด ์กด์ฌํ์ง ์์๋ 404๋ฅผ ๋ฆฌํดํ๋ค. ์ฆ, ์๋๊ฑธ ๋ฌ๋ผ๊ณ ํ์๋ 404 ์๋ฌ๋ฅผ ๋ฆฌํดํ๋ค. ๋๋ถ๋ถ์ ํ๋ ์์ํฌ์์ ์๋ URL๊ฒฝ๋ก๋ก ์์ฒญํ์ ๊ฒฝ์ฐ 404๋ฅผ ๋ฆฌํดํด์ค๋ค. ํ์ง๋ง ์์์ ๊ฒฝ์ฐ ์๋ฒ์์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์๋ฅผ ๋ค์ด /api/user/:id ๊ฒฝ๋ก๋ก ์กด์ฌํ์ง ์๋ id๋ฅผ ๋ฃ์ด ์์ฒญํ์๋, ํด๋น id๋ ์๋ ๊ฐ์ด๋ฏ๋ก 404๋ฅผ ๋ฆฌํดํด์ผํ๋ค. |
405 Method Not Allowed ํ์ฉ๋์ง ์์ ๋ฉ์๋ | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ํ์ฉ๋์ง ์๋ ๋ฉ์๋์ธ ๊ฒฝ์ฐ. ' ์ด ์์ฒญ์ ์ด ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง ์๊ฒ ๋ค! ' * ๋ฉ์๋ : GET, POST, PUT, PATCH, DELETE ๋ฑ ... |
409 Conflict ์ถฉ๋ | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์๋ฒ์ ์ํ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ถฉ๋์ด๋ ๋ชจํธํ ๊ฐ๋ ์ด๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ์ ์ํ ์ ์ฑ ์ ์ํด ์ถฉ๋์ด๋ผ๋ฉด 409๋ฅผ ๋ฆฌํดํ๋ฉด๋๋ค. ๋ชจํธํ ๊ฐ๋ ์ผ์๋ก ์๋ฌ ์์ธ์ ์ ๋ช ์ํด์ฃผ์. *HATEOS(ํค์ดํฐ์ค์ค) ์ฐธ๊ณ |
413 Payload Too Large | ์์ฒญ์ด ์๋ฒ๊ฐ ์ ์ํ ํ๊ณ๊ฐ ๋ณด๋ค ํด ๊ฒฝ์ฐ. ์ฐ๊ฒฐ์ ๋๊ณ ์๋ฌ๋ฅผ ๋ฆฌํดํ๊ฑฐ๋ Retry-Afterํค๋ ํ๋๋ก ๋๋ ค๋ณด๋ผ ์ ์์ ex) ์ฉ๋์ด ๋๋ฌดํฐ ํ์ผ์ ์ ๋ก๋ํจ → 413 ์๋ฌ ๋ฆฌํด |
429 Too Many Requests | ํด๋ผ์ด์ธํธ๊ฐ ์ผ์ ์๊ฐ ๋์ ๋๋ฌด ๋ง์ ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ * HTTP header Retry-Afer ๋ฅผ ๋ช ์ํด ์ฟจํ์์ ์๋ ค์ค ์ ์์. ex) ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์์์ ์์ฒญํ๋ ๊ฒฝ์ฐ ์๋ตํ๋ค. ํนํ Ddos ๊ณต๊ฒฉ, Brurw-force ๊ณต๊ฒฉ ๋ฑ์ด ์ด์ ํด๋นํ๋ค. |
5xx
Server Errors ์๋ฒ ์ค๋ฅ
์๋ฒ ์ค๋ฅ๋ก ์ธํด ์์ฒญ์ ์ํํ ์ ์์.
500 Internal Server Error | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํต๊ณผ๊ฐ ๋์์ผ๋ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ ex) ์๋ฒ๋จ์์ ์คํ๊ฐ ์์ ๊ฒฝ์ฐ, DB ์ฐ๊ฒฐ ์ค๋ฅ, ์ค๋ฒํ๋ก์ฐ ๋ฑ... |
502 Bad Gateway | ์๋ฒ๊ฐ ๊ฒ์ดํธ์จ์ด๋ ํ๋ก์ ์๋ฒ ์ญํ ์ ํ๋ฉด์ ์
์คํธ๋ฆผ ์๋ฒ๋ก๋ถํฐ ์ ํจํ์ง ์์ ์๋ต์ ๋ฐ์์. * ์ ์คํธ๋ฆผ ์๋ฒ : ํ๋ก์ ์๋ฒ ๊ณ์ธต ๊ตฌ์กฐ์์ ์์ ์๋ฒ. ํ๋ก์๋ฅผ ๊ฑฐ์น๊ธฐ ์ด์ ์๋ฒ ex) nginx๋ apache ๋ฑ ์น ์๋ฒ ์ค์ ์ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ |
503 Service Unavailable | ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ค๋น๊ฐ ๋์ง ์์. ๋ณดํต ์๋ฒ๊ฐ ์ ๊ฒ์ ์ํด ๋ค์ด๋๊ฑฐ๋ ์ค๋ฒ๋ก๋๋์ด ๋ฐ์ํ๋ค. ์ผ์์ ์ธ ์ํฉ๋ฅผ ์ํด ์ฌ์ฉ๋์ด์ผ ํ๋ฉฐ, Retry-After HTTP header ๋ ๊ฐ๋ฅํ๋ค๋ฉด ์๋น์ค ๋ณต๊ตฌ๋ฅผ ์ํ ์์ ์๊ฐ์ ํฌํจํด์ผ ํ๋ค. |
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํต๊ณผ๊ฐ ๋์์ผ๋ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ 5xx ์ฝ๋๋ฅผ ๋ฆฌํดํ๋ค. 5xx ์๋ฌ๋ ๊ฐ๋ฐ์์ ์ค์, ์์น!! ์๋ฒ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์๋๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฒ ์ ํํ๊ณ , 4xx ์๋ฌ๋ฅผ ๋ฆฌํดํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค. (*ํนํ ์ค๋ฒํ๋ก์ฐ ์ฃผ์)
Nginx, Apache ๋ฑ ์๋ฒ ์ด์ฉ์ ์ฌ์ฉ๋๋ ์น์๋ฒ์ ์ค๋ฅ๊ฐ ์๋ ์ด์ ํด๋ผ์ด์ธํธ๊ฐ 5xx์๋ฌ๋ฅผ ๋ณผ ์ ์๋๋ก ๋ง๋ค์ด์ผ ์์ฑ๋ ๋์ api์ด๋ค.
์์ฃผ ์ฐ์ด๋ ์ํฉ
- ํ์ ๋ฆฌ์คํธ๋ฅผ ์์ฒญํ์๋, DB์ ์ ์ฅ๋ ์ ๋ณด๊ฐ ํ๋๋ ์์
200 & response body์ [] ์ฝ์
→ ํด๋น url์ด ์กด์ฌํ๊ณ , ์ฌ์ฉ์์ ์์ฒญ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ด ์๋๊ธฐ๋๋ฌธ์ 4xx์๋ฌ๋ผ๊ณ ํ ์ ์๋ค. ๋ํ ์๋ฒ ์ฒ๋ฆฌ๋จ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ๋ ์๋๊ธฐ๋๋ฌธ์ '์ฑ๊ณต' ์ํ์ฝ๋ 200์ ๋ฆฌํดํ๊ณ body์ ๋น ๊ฐ์ ๋ด๋๋ค.
- ์์ด๋ ์ฐพ๊ธฐ๋ฅผ ํ๋๋ฐ ๊ฒฐ๊ณผ๊ฐ ์์๋
์ ์ผ์ด์ค์ ๋ง์ฐฌ๊ฐ์ง.
- ์์ด๋ ์ค๋ณต์ฒดํฌ๋ฅผ ํ์๋, ์ด๋ฏธ ๊ฐ์ ๋ ๊ณ์ ์ผ ๊ฒฝ์ฐ
409 & response body์ ์ถฉ๋ ๋ด์ฉ ๋ด๊ธฐ
→ ์์ง ์ ๊ท ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํ๋ ๊ฒ๋ ์๋๋ผ 400์ด๊ธฐ์ ์ ๋งคํ๋ค. ์๋ฒ ์ฒ๋ฆฌ๋จ์์ ๊ฒฐ๊ณผ๊ฐ๊ณผ ์์ฒญ๊ฐ์ ๋น๊ตํด ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์ '์ถฉ๋'๋ก ๋ณด๋ ๊ฒ์ด ๋ง๋ค๊ณ ์๊ฐํ๋ค.
์ฐธ๊ณ ๋งํฌ
[okky] api ์์ฒญ ํ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ๊น์ ๋ํ ๊ณ ๋ฏผ์ด์์.
[Tistory] REST API ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ HTTP ์ํ ์ฝ๋(HTTP status code) ***
[blog] Five Clues That Your API isn't RESTful
'๐์ฝ๋ฉ ๊ณต๋ถ > ์ฝ๋ฉ๊ณต๋ถ ์ด๋ชจ์ ๋ชจ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Api ๋ฌธ์ ์๋ํ์ ๋ํ ๊ฐ์ธ์ ์ธ ๋ ธ๋ ฅ๊ณผ ํ๊ธฐ... (0) | 2021.12.26 |
---|---|
NCP) nCloud ๋ค์ด๋ฒ API Signature Key ์์ฑ (0) | 2021.10.09 |
Server ) Api Http status code์ ๋ํ์ฌ, header์ ํต์ผ์์ผ์ผํ ๊น body์๋ง ๋ด์์ผ ํ ๊น? (0) | 2021.10.03 |
Server ) Nginx 502 Bad Gateway ์๋ฌ / nginx ์ค์ ์๋ชปํจ (1) | 2021.09.28 |
๋ก์ง ) ๋ก๊ทธ์ธ, ๋ฉ์ผ ์ธ์ฆ (0) | 2021.09.25 |