[rest] 편안한 POST 응답을위한 ‘최상의’실습
그래서 여기에 새로운 것은 없습니다. 나는 약간의 설명을 얻으려고 노력하고 있으며 다른 게시물에서 찾을 수없는 것 같습니다.
다음과 같이 새 리소스를 안정적으로 만들고 있습니다.
/books (POST)
시체와 함께 :
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
새 리소스의 Location 헤더와 함께 201 (Created)을 반환해야한다는 것을 알고 있습니다.
Location: /books/12345
내가 스스로 대답 할 수없는 질문은 서버가 몸에 돌아와야하는 것입니다.
나는 종종 이러한 유형의 응답을 수행했습니다.
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
나는 몇 가지 이유로 이것을했다 :
- angularjs와 같은 프론트 엔드 프레임 워크 용 API를 작성했습니다. 내 특별한 경우에는 앵귤러 리소스를 사용하고 있으며 리소스를 찾으려면 ID 만 필요합니다. 응답 본문에 ID를 반환하지 않으면 Location 헤더에서 ID를 구문 분석해야합니다.
- 모든 책의 GET에서 나는 보통 id뿐만 아니라 전체 객체를 반환합니다. 이런 의미에서 내 클라이언트 코드는 ID를 가져올 위치 (위치 헤더 또는 본문)를 구별하지 않아도됩니다.
이제는 내가 실제로 회색 영역에 있다는 것을 알고 있지만 대부분의 사람들은 전체 리소스를 반환하는 것이 ‘나쁜’습관이라고 말합니다. 그러나 서버가 리소스에 정보를 변경 / 추가하면 어떻게 될까요? 그것은 분명히 ID를 추가하지만 타임 스탬프와 같은 다른 것을 추가 할 수도 있습니다. 전체 리소스를 반환하지 않으면 POST를 수행하고 ID를 반환 한 다음 클라이언트가 GET을 수행하여 새 리소스를 얻는 것이 좋습니다.
답변
업데이트에서 전체 객체를 반환하는 것은 그다지 중요하지 않지만 전체 객체를 만들 때 반환하는 것이 일반적인 사용 사례에서 나쁜 습관이되는 이유는 거의 알 수 없습니다. 이것은 최소한 ID를 쉽게 얻고 관련성이있을 때 타임 스탬프를 얻는 데 유용합니다. 이것이 실제로 Rails로 스캐 폴딩 할 때 얻는 기본 동작입니다.
초기 POST로 얻을 수있는 데이터를 얻기 위해 ID 만 반환하고 GET 요청을 수행하면 아무런 이점이 없습니다.
어쨌든 API가 일관된 한 귀하의 요구에 가장 잘 맞는 패턴을 선택해야한다고 생각합니다. REST API를 빌드하는 올바른 방법은 없습니다 (imo).
답변
새로운 객체를 반환하는 것은 “Uniform Interface-표시를 통한 자원 조작”의 REST 원칙에 적합합니다. 완전한 객체는 생성 된 객체의 새로운 상태를 나타냅니다.
API 디자인에 대한 훌륭한 참조 자료는 다음과 같습니다. 실용적인 RESTful API 디자인을위한 모범 사례
여기에 귀하의 질문에 대한 답변이 포함되어 있습니다 : 업데이트 및 생성은 리소스 표현을 반환해야합니다
그것은 말한다 :
API 소비자가 업데이트 된 표현을 위해 API에 다시 충돌하지 않도록하려면 API가 응답의 일부로 업데이트 된 (또는 생성 된) 표현을 반환하도록하십시오.
나에게는 실용적으로 보이고 위에서 언급 한 REST 원칙에 적합합니다.