REST 삽입에 대한 적절한 응답-완전히 새로운 레코드 또는 레코드 ID 값?


15

삽입 (Idempotent가 아닌 POST) 및 업데이트 (PUT, Idempotent) 요청으로 데이터베이스를 응용 프로그램에 추가 / 업데이트 할 수있는 REST API를 작성 중입니다.

POST (삽입) 작업에 대한 응답으로 클라이언트에게 보내는 데이터에 관한 표준 또는 모범 사례가 있는지 궁금합니다. 최소한 레코드 ID 값을 다시 보내야합니다 (예 : 새 레코드는 레코드 # 1234입니다).

우리는 전체 대상으로 응답해야합니까? (예 : 본질적으로 "GET / object_type / 1234"요청에서 얻은 것과 동일한 응답)

새로운 ID 값으로 만 응답해야합니까? (예 : "{id : 1234}": 전체 레코드를 가져 오려면 전체 레코드를 가져 오기 위해 추가 HTTP GET 요청을 수행해야 함을 의미합니다)

전체 객체의 URL을 가리키는 리디렉션 헤더?

완전히 다른 것?


나는 가장 좋은 방법에 대해 OOT 확신하지만, 그렇지 않으면 성공적인 -1 등 다른 사람들이 말을보고 관심이 있다면 나를 위해 개인적으로 나는 아마 새로 생성 된 ID를 반환이라고 생각하지만
dreza

답변:


13

글쎄, REST 인터페이스에서 가능한 한 HTTP를 따라 Location 헤더 필드의 201과 URI를 새로 만든 Resource에 반환합니다. 상태 코드 정의 는 다음과 같습니다 .

10.2.2 201 생성됨

요청이 이행되어 새 자원이 작성되었습니다. 새로 작성된 자원은 응답의 엔티티에 리턴 된 URI에 의해 참조 될 수 있으며 Location 헤더 필드에 의해 제공된 자원에 대한 가장 구체적인 URI가 있습니다. 응답은 사용자 또는 사용자 에이전트가 가장 적합한 것을 선택할 수있는 자원 특성 및 위치 목록을 포함하는 개체를 포함해야한다 (SHOULD). 엔티티 형식은 Content-Type 헤더 필드에 지정된 매체 유형으로 지정됩니다. 오리진 서버는 201 상태 코드를 반환하기 전에 반드시 리소스를 생성해야합니다. 조치를 즉시 수행 할 수없는 경우 서버는 대신 202 (Accepted) 응답으로 응답해야합니다.

문제가 발생하면 -1다른 사람들이 말한 것처럼 반환하지 말고 단순히 클라이언트 또는 서버 오류 코드 (4xx 또는 5xx)로 반환해야한다고 주장합니다 . 예를 들어, 사용자가 새로운 리소스를 만들 수없는 경우 "401 Unauthorized"를 반환하면됩니다.


몸은 어때? 비어 있거나 새로 작성된 전체 객체가 응답합니까?
개발자

내가 아는 두 가지 일반적인 옵션은 1) 위치 헤더를 새 엔티티를 찾을 수있는 위치로 설정하거나 2) 본문에 새 엔티티를 포함하는 것입니다. 나는 실질적인 이유로 후자와 개인적으로 간다. Somtimes 더 resty 느낌 결합)
브루노 Schäpper에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.