• REST API를 위한 HTTP 상태 코드 :: 마이구미
    HTTP 2017. 10. 10. 20:26
    반응형

    이 글은 REST API 설계를 위한 기본적인 HTTP 상태 코드를 다룬다.

    일반적으로 실제 주로 이용하는 상태 코드들을 다룬다.

    조금 더 자세한 내용과 다른 상태 코드는 링크를 참고바란다.

    http://www.restapitutorial.com/httpstatuscodes.html

    또한, REST API를 기반으로 HTTP 상태 코드를 다룬다는 것을 인지하자.


    기본적으로 성공은 200, 잘못된 요청은 400, 서버 오류는 500 이라고 알고 있다.

    그 결과, 안 좋은 사례로는 위와 같은 상태 코드를 한정적으로 사용하는 모습을 많이 볼 수 있다.


    여기서 의문이 들 수 있다.


    왜 한정적으로 사용하는 것이 안 좋은 사례인가? 성공은 200, 실패는 400, 오류는 500 더 간단하고 직관적이지 않은가?


    => 클라이언트 측면에서 바라볼 때, 해당 응답에 따라 얻어지는 이점이 크게 차이난다.

    예를 들어, 404 코드로 응답된다면, 클라이언트 쪽에서 존재하지 않는 자원으로 쉽게 인지할 수 있다.

    하지만 400 코드로 응답된다면, 잘못된 요청으로 생각하여, 다른 방향으로 접근할 수 있기에 생산성까지 떨어뜨리게 된다.


    HTTP 상태 코드는 무수히 많이 존재한다.

    크게 1xx, 2xx, 3xx, 4xx, 5xx 로 분류할 수 있다.

    여기서는 REST API 구조 설계를 위해 일반적으로 이용하는 상태 코드들을 다뤄볼 것이다.


    200 OK

    HTTP 요청에 대한 성공을 뜻하는 코드로써, 성공에 대한 기준 코드라고 볼 수 있다.

    기준이 되는 코드로써, 일반적으로 사용된다.

    201 Created

    새로운 자원에 대한 생성을 뜻하는 코드가 된다.

    주로 POST 요청시에 많이 이용하게 된다.


    204 No content

    요청에 대해 성공은 했지만, 리턴되는 콘텐츠가 없음을 뜻하는 코드가 된다.

    Delete 요청시 많이 이용하게 된다.

    개인적인 견해로는 REST API 구조라면 204 코드는 권하지 않는다.

    아무런 리턴되는 값이 없다는 것은 요청에 따른 정보를 아무것도 얻을 수 없음을 뜻하기에, REST API 성격상은 맞지 않는다고 본다.

    관련 자료 - http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/


    400 Bad Request

    잘못된 요청으로 인한 실패를 뜻하는 코드가 된다.

    예를 들어, 전달 인자가 잘못되어 구문을 인식하지 못하는 경우라고 볼 수 있다.


    401 Unauthorized

    요청에 대한 인증이 필요함을 뜻하는 코드가 된다.

    예를 들어, OAuth에서 유효하지 않은 토큰을 들 수 있다.


    403 Forbidden

    서버에서 요청에 대해 거부하고 있다. 권한이 없음을 뜻하는 코드가 된다.

    401은 인증 실패라고 한다면, 403은 권한이 없다고 보면 된다.

    예를 들어, 디렉토리에 대한 접근 권한이 없을 경우를 들 수 있다.

    또한 오픈 API 이용 시 API에 대한 ID 또는 Secret 값이 정확하지 않을 경우 발생한다.


    404 Not Found

    요청한 자원을 찾을 수 없음을 뜻하는 코드가 된다.

    존재하지 않는 페이지에 접근 시 많이 경험해봤을 것이다.

    본인의 경우에는 DELETE 요청이 없는 자원일 때, 404 코드를 내려준다.


    409 Conflict

    요청에 대해 충돌이 발생했음을 뜻하는 코드가 된다.

    본인은 주로 POST 요청 시 이미 존재하는 자원이  경우에 대한 응답으로 사용한다.

    반응형

    댓글

Designed by Tistory.