HTTP Status Code
HTTP Status Code? π―
2XX SUCCESS
200λ²λμ μνμ½λλ μλ²κ° ν΄λΌμ΄μΈνΈμκ² μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λμμλ 보λ΄λ μ½λλ€μ΄λ€.
200λ²(OK) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ μλ²κ° μ μμ μΌλ‘ μ²λ¦¬νλ€.
HTTP/1.1 200 OK
{
"result" : false
"status" : 400
}
μμ κ°μ΄ μ±κ³΅νλ€λ 200μ½λλ₯Ό 보λμ§λ§ μ€μ λ΄μ©μ μ€ν¨μΈ κ²½μ°λ‘ μ°μ΄λ μ¬λ‘κ° μλ€λ©΄ λΉμ₯ μμ νμ.
201λ²(Created) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ μλ²κ° μ μμ μΌλ‘ μ²λ¦¬νκ³ μλ‘μ΄ λ¦¬μμ€κ° μκ²Όλ€.
201 μν μ½λλ POST, PUT μμ²μ λν μλ΅μ μ£Όλ‘ μ¬μ©λλ€.
202λ²(Accepted) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ μ μμ μ΄λ, μλ²κ° μμ§ μμ²μ μλ£νμ§ λͺ»νλ€.
ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ μμ μ΄λ©΄ μλ²μμ μμ μ μ±κ³΅/μ€ν¨ μλ΅νλ κ² μΌλ°μ μ΄λ, μμ μλ£λ₯Ό μν μΌλ ¨μ μμ λ€μ΄ μ€λ 걸리기 λλ¬Έμ λμ€μ μλ €μ£Όκ² λ€λ μλ―Έλ€.
204λ²(No Content) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ μ μμ μ΄λ€. νμ§λ§ 컨ν μΈ λ₯Ό μ 곡νμ§ μλλ€.
μμ μμ μμ²μ νκ³ μ΄ μμ²μ΄ μ ν¨νλ μλ²λ ν΄λΉ μμμ μμ νλ€. λ μ΄μ μλ΅ν 컨ν μΈ κ° μκΈ° λλ¬Έμ 컨ν μΈ κ° μλ 204λ‘ μλ΅νλ€.
(μ¬κΈ°μ μ£Όμν μ μ 200μΌλ‘ μλ΅νκ³ μλ΅ bodyμ null, {}, [], false λ±μΌλ‘ μλ΅νλ κ²κ³Ό λ€λ₯΄λ€λ κ²μ΄λ€. 204μ κ²½μ° HTTP Response bodyκ° μμ μ‘΄μ¬νμ§ μλ κ²½μ°λ€.)
Example
PUT
-
μμ μμ μμ²μ κ²°κ³Όκ° κΈ°μ‘΄μ μμ λ΄μ©κ³Ό λμΌνμ¬ λ³κ²½λ λ΄μ©μ΄ μμ λ 204λ‘ μλ΅ν μ μλ€.
-
λ§μ½ μμ μμ²μΌλ‘ μμμ λ΄μ©μ΄ λ³κ²½λλ€λ©΄ 201λ‘ μλ΅ν κ²μ΄λ€.
DELETE
- μμ μμ²μΌλ‘ μμμ μμ νμ¬ λ μ΄μ μ‘΄μ¬νμ§ μκ³ κ·Έ μμμ μ°Έμ‘°νλ λͺ¨λ μμλ μμ λμ΄ λ μ΄μ HTTP bodyλ₯Ό μλ΅νλ κ²μ΄ 무μλ―Έν΄μ‘μ λ μ¬μ©νλ€.
4XX Client errors
4XXμ μν μ½λλ€μ ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ ν¨νμ§ μμ μλ²κ° ν΄λΉ μμ²μ μννμ§ μμλ€λ μλ―Έλ€.
400λ²(Bad Request) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ ν¨νμ§ μμ λ μ΄μ μμ μ μ§ννμ§ μλ κ²½μ°
ν΄λΌμ΄μΈνΈλ‘λΆν° μμ²μ΄ λ€μ΄μ€λ©΄ μμ μ λ°λ‘ μ§ννμ§μκ³ μ ν¨μ±κ²μ¬λΆν° νλκ²μ΄ μ³λ€.
λλΆλΆμ APIλ μ¬μ μ μ ν¨μ± κ²μ¦μ ν΅ν΄ 400 μν μ½λλ‘ ν΄λΌμ΄μΈνΈμκ² μ ν¨νμ§ μμ μμ²μμ μλ΅νλ€.
κ·Έλ¬λ, 400 μν μ½λλ‘ μλ΅νλ κ²λ§μΌλ‘λ λΆμ‘±νλ€.
μ€λ₯ λ°μ μ νλΌλ―Έν°μ μμΉ(path, query, body), μ¬μ©μ μ λ ₯ κ°, μλ¬ μ΄μ λ₯Ό κΌ λͺ μνλ κ²μ΄ μ’λ€.
Example
class RequiredKeys {
constructor(REQUIRED_KEYS) {
this.REQUIRED_KEYS = REQUIRED_KEYS;
}
verify() {
for (let key in this.REQUIRED_KEYS) {
if (!this.REQUIRED_KEYS[key] && this.REQUIRED_KEYS[key] !== 0) {
const err = new Error(`${key} μ λ³΄κ° μ¬λ°λ₯΄μ§ μμ΅λλ€.`);
err.status = 400;
throw err;
}
}
}
}
401λ²(Unauthorized) βΆ ν΄λΌμ΄μΈνΈκ° κΆνμ΄ μκΈ° λλ¬Έμ μμ μ μ§νν μ μλ κ²½μ°
μν μ½λ μ΄λ¦λ§ 보면 κΆν(authorized)μ λν λ΄μ©μ²λΌ 보μ΄μ§λ§, μ¬μ€ μΈμ¦(authenticated)μ λν μ΄μΌκΈ°λ€.
401μ λΉμΈμ¦μ΄λ€.
403λ²(Forbidden) βΆ ν΄λΌμ΄μΈνΈκ° κΆνμ΄ μκΈ° λλ¬Έμ μμ μ μ§νν μ μλ κ²½μ°
403μ κΆν(authorized)μ λν λ΄μ©μ΄λ€.
404λ²(Not Found) βΆ ν΄λΌμ΄μΈνΈκ° μμ²ν μμμ΄ μ‘΄μ¬νμ§ μλ€.
404λ²μλ¬λ ν¬κ² 2κ°μ§λ‘ λλλ€.
- κ²½λ‘κ° μ‘΄μ¬νμ§ μμ
μ‘΄μ¬νμ§ μμ κ²½λ‘λ μ½κ² 404λ‘ μλ΅.(λΌμ°ν°μμ μ²λ¦¬)
- μμμ΄ μ‘΄μ¬νμ§ μμ
/users/:id μμ idκ°μ΄ λ§μ½ DBμ μλ κ°μ΄λΌλ©΄ μμμ΄ μ‘΄μ¬νμ§ μλ€λ μλ―Έμ΄λ€.
λ°λΌμ μ‘΄μ¬νλ κ²½λ‘μ λν μμ²μ΄λΌλ μμμ΄ μ‘΄μ¬νλμ§ νμ ν, μ‘΄μ¬νμ§ μλλ€λ©΄ 404 μν μ½λλ‘ μλ΅ν΄μΌ νλ€
405λ²(Method Not Allowed) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ΄ νμ©λμ§ μλ λ©μλμΈ κ²½μ°
μμ(URI)μ μ‘΄μ¬νμ§λ§ ν΄λΉ μμμ΄ μ§μνμ§ μλ λ©μλμΌ λ μλ΅νλ μν μ½λλ€.
μμ±λ λμ APIλ₯Ό μ 곡νκΈ° μν΄μλ μ¬μ©νλκ²μ μΆμ²νλ€.
409λ²(Conflict) βΆ ν΄λΌμ΄μΈνΈμ μμ²μ΄ μλ²μ μνμ μΆ©λμ΄ λ°μν κ²½μ°
400, 401, 403, 404, 405 μν μ½λμ μνκΈ° μ 맀ν μ€λ₯μ μν©λ€μ 409λ‘ μλ΅νλ€.
Example
μμ(URI) /users/1μ μ‘΄μ¬νλ λ©μλκ³ Not 405
/users/:idμμ :idκ° μ ν¨ν νμμ΄κ³ Not 400
1 μ¬μ©μλ μ‘΄μ¬νκ³ Not 404
ν€λμ μΈμ¦(X-TOKEN)λ μ ννκ³ Not 401
μμ κΆνλ μλ κ²½μ° Not 403
λλΆλΆμ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμμ§λ§ λ‘μ§μμ²΄κ° λ¬Έμ μμ μ μλ€. μλ₯Όλ€λ©΄
μ¬μ©μμ κ²μλ¬Όμ΄ μ‘΄μ¬νλ κ²½μ° μ¬μ©μλ₯Ό μμ ν μ μλ€λ λΉμ§λμ€ λ‘μ§μ΄ μμ μ μλ€.
μ΄λ κ² API μ¬μ©μ μμ΄ λΉμ§λμ€ λ‘μ§μ λͺ¨μμ΄ λ°μνμ¬ μ²λ¦¬κ° λΆκ°λ₯ν κ²½μ° μλ΅νλ μν μ½λλ€.
const isExistItem = new IsExistItem(check, resultType, 409);
isExistItem.existErr('μ΄λ―Έ νλͺ©μ μμ΅λλ€.');
μ€λ₯ μν©κ³Ό λ§μ°¬κ°μ§λ‘ μλ΅ μ μ€λ₯μ μμΈμ μλ €μΌ νλ€.
429λ²(Too Many Requests) βΆ ν΄λΌμ΄μΈνΈκ° μΌμ μκ° λμ λ무 λ§μ μμ²μ λ³΄λΈ κ²½μ°
ν΄μ»€λ μ¬μ©μμ λΉλ°λ²νΈλ₯Ό μμλ΄κΈ° μν΄ POST /login APIμ passwordλ₯Ό 무차λ³λ‘ λμ νλ©΄μ μμ²ν μ μλ€.
μλ² μ μ₯μμ μμμ κΈ°λ°μ±(Confidentiality)μ νΌν΄λ₯Ό μ μ μ μλ 곡격μ΄λ©΄μ, μ΄λ¬ν λ¬΄μ°¨λ³ μμ²μΌλ‘ λ€λ₯Έ μμ²μ μ²λ¦¬ν μ μκ±°λ μ²λ¦¬κ° λ¦μ μ μλ κ°μ©μ±(Availability)μ νΌν΄λ₯Ό μ μ μ μλ€.
μλ²λ μ΄λ¬ν 곡격μ λλΉν΄ μΈμ¦ APIμ κ²½μ° κ° ν΄λΌμ΄μΈνΈλ n μκ° λμ n νλ§ μμ² κ°λ₯νλ€λ λ£°μ μ νκ³ μ΄κ²μ μ΄κ³Όνλ©΄ 429 μν μ½λλ₯Ό μλ΅ν΄μΌ νλ€.
5XX SERVER ERRORS
5XX μν μ½λλ€μ μλ² μ€λ₯λ‘ μΈν΄ μμ²μ μνν μ μλ€λ μλ―Έλ€.
-
APIλ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈμκ² 5XX μν μ½λλ λνλ΄μ§ λ§μμΌ νλ€.
-
μ΅μ μ μΉ μ ν리μΌμ΄μ νλ μμν¬λ μ체 μΉμλ²λ₯Ό λ΄μ₯νκ³ μμ΄μ μΉμλ²(Apache, Nginx) μμ΄ μ΄μν μ μλ€.
-
κ·Έλ¬λ, λ³΄ν΅ μ΄μ λ 벨μμ μ΄λ κ² νλ κ²½μ°λ λλ¬Όκ³ μμ μΉμλ²λ₯Ό λκ³ μΉ μ ν리μΌμ΄μ μ μ°κ²°ν΄μ μ΄μνλ€.
-
λ°λΌμ, μλ¨μ μΉμλ²(Apache, Nginx)μμ λ°μνλ μ΄μ© μ μλ μ€λ₯λ₯Ό μ μΈνκ³ APIμμ 5XX μν μ½λκ° μλ΅λμ μλλ€.
-
API λ 벨μμ μλ²½ν μμΈμ²λ¦¬λ₯Ό ν΅ν΄ 5XX μλ² μ€λ₯ μν μ½λλ₯Ό λ°©μ§ν΄μΌ νλ€.