API를 설계할 때 response format을 어떻게 정하는가?
딱히 정해진 표준 format이 없기 때문에 서비스에 알맞은 format을 정하는 것이 중요!
표준은 딱히 정해지지 않았으나 크게 2가지로 사용되는 것 같음.
Http status code와 body를 붙여서 쓰는 방식
//GET 요청으로 단일 데이터를 가져올 때
HTTP/1.1 200
Content-Type: application/json
{
"id": 11,
"title": "Effective Java",
"contents": "Java Platform Best Practices Guide"
}
//POST 요청으로 데이터를 생성한 결과
HTTP/1.1 201
Location: /v1/book/11
Content-Type: application/json
{
"message": "The Book was created successfully"
}
//GET 요청으로 단일 데이터를 가져오는데 실패했을 때
HTTP/1.1 404
Content-Type: application/json
{
"message": "The item does not exist"
}
//잘못된 인증 값을 가지고 요청했을 때
HTTP/1.1 401
Content-Type: application/json
{
"message": "Authentication credentials were missing or incorrect"
}
공식 HTTP 사양에는 41개 이상의 상태 코드가 있으며 각 코드를 사용하는 방법에 대한 많은 해석이 있을 수 있다. 반면에 JSend는 동적 웹 UI의 맥락에서 JSON 트래픽 처리와 관련하여 보다 제한적인 상태 코드 설정을 정의할 수 있다.
http 상태 코드는 항상 200으로 통일하고 json body를 통해서만 성공,오류 등을 판단하고 그에 해당하는 데이터를 보내줌.
Jsend라는 표준 방식이 존재함.
/GET 요청으로 단일 데이터를 가져올 때
{
"status" : "success",
"data" : {
"id" : 1,
"title" : "Another blog post"
}
}
//일반적인 에러가 발생했을 때
{
"status" : "fail",
"message" : "fail message"
}
//필드 에러가 발생했을 때
{
"status" : "fail",
"message" : "fail message",
"errors" : [{error1}, {error2} ... ]
}
//Exception이 발생했을 때
{
"status" : "error",
"message" : "custom message"
}