HTTP 201 Created

생성에 대한 성공 응답: 새 리소스가 생성되었으며, Location에 위치가 명시됩니다.

HTTP 201의 의미

HTTP 201 Created는 요청(거의 항상 POST 또는 PUT)이 서버에 새 리소스를 성공적으로 생성했을 때 반환됩니다. REST API는 이를 사용해 “새로운 무언가가 이제 존재한다”는 것을 일반적인 200 성공과 구분합니다.

올바른 201 응답에는 새로 생성된 리소스의 URL을 담은 Location 헤더가 포함되며, 클라이언트가 후속 GET을 할 필요가 없도록 본문에 생성된 객체를 함께 반환하는 경우가 많습니다.

201 응답의 일반적인 원인

  • POST 요청으로 레코드, 파일 또는 계정이 생성되었습니다.
  • PUT 요청으로 클라이언트가 지정한 정확한 URL에 리소스가 생성되었습니다.
  • 배치 엔드포인트가 하나의 주요 리소스를 동기적으로 생성 완료했습니다.

개발자를 위한 모범 사례

  • Location 헤더를 새로 생성된 리소스의 정규 URL로 설정합니다.
  • 클라이언트의 왕복 요청을 줄이기 위해 서버가 할당한 id와 함께 생성된 표현을 응답 본문에 포함해 반환합니다.
  • 생성 작업이 완료되지 않고 대기열에 들어간 경우에는 대신 202 Accepted를 반환합니다.
  • 동일한 POST 요청이 반복되어 중복이 생기나요? 멱등성 키(idempotency key)를 도입하고, 재전송 시 200 또는 409로 응답하는 방식을 검토하세요.

응답 예시

HTTP/1.1 201 Created
Location: /api/users/1024
Content-Type: application/json

{"id":1024,"name":"New user"}

자주 묻는 질문

200과 201의 차이는 무엇인가요?

둘 다 성공을 의미하지만, 201은 새 리소스가 생성되었음을 클라이언트에 구체적으로 알려줍니다. 200은 단지 요청이 처리되었음을 의미합니다.

201 응답에 Location 헤더가 반드시 필요한가요?

강력히 권장됩니다. 새로 생성된 리소스의 URL을 가리켜 클라이언트가 이를 가져오거나 링크할 수 있게 해줍니다.

API가 201 대신 202를 반환해야 하는 경우는 언제인가요?

생성이 비동기적으로 이루어질 때입니다. 202는 요청이 접수되었지만 리소스가 아직 존재하지 않음을 의미합니다.