REST API Response format

devkwon·2024년 1월 11일

API를 설계할 때 response format을 어떻게 정하는가?
딱히 정해진 표준 format이 없기 때문에 서비스에 알맞은 format을 정하는 것이 중요!

표준은 딱히 정해지지 않았으나 크게 2가지로 사용되는 것 같음.

Http Status Code + JSON Body

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"
    }

Jsend

Http status code가 있는데 왜 쓰는가?

공식 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"
    }

0개의 댓글