programing

안정적 POST 대응을 위한 '베스트' 프랙티스

i4 2023. 2. 25. 19:45
반응형

안정적 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'
}

몇 가지 이유로 이 작업을 수행했습니다.

  1. angularjs와 같은 프런트 엔드 프레임워크용 API를 작성했습니다.특히 각도 리소스를 사용하고 있으며 리소스를 찾기 위해 ID만 있으면 되는 경우가 많습니다.응답 본문에서 ID를 반환하지 않으면 Location 헤더에서 ID를 해석해야 합니다.
  2. 모든 책의 GET에서 나는 보통 아이디뿐만 아니라 전체 오브젝트를 반환한다.이 점에서 클라이언트코드는 ID를 어디서 가져올지 구분할 필요가 없습니다(위치 헤더 또는 본문).

지금은 제가 정말 애매모호하다는 것을 알지만, 대부분의 사람들은 자원 전체를 반환하는 것은 '나쁜' 관행이라고 말하고 있습니다.그러나 서버가 리소스를 변경/추가하면 어떻게 됩니까?확실히 ID가 추가되지만 타임스탬프 등의 다른 것도 추가될 수 있습니다.자원 전체를 반환하지 않는 경우, POST를 실행하고 ID를 반환한 후 클라이언트에 GET을 실행하여 새로운 자원을 취득하는 것이 좋은 것일까요.

새로운 오브젝트를 반환하는 것은 "Uniform Interface - 표현을 통한 자원 조작"의 REST 원칙에 부합합니다.완전한 개체는 생성된 개체의 새 상태를 나타냅니다.

API 설계에 관한 매우 훌륭한 레퍼런스는 다음과 같습니다: Best Practices for Design a Pragmatic RESTful API

여기에는 다음과 같은 질문에 대한 답변이 포함되어 있습니다.갱신작성 리소스 표현이 반환됩니다.

다음과 같이 되어 있습니다.

API 소비자가 업데이트된 표현을 위해 API를 다시 클릭할 필요가 없도록 하려면 API가 응답의 일부로 업데이트된(또는 생성된) 표현을 반환하도록 하십시오.

그것은 나에게 매우 실용적이고 내가 위에서 말한 REST 원칙과 맞아떨어진다.

업데이트 시 개체 전체를 반환하는 것은 그다지 관련이 없는 것처럼 보이지만, 일반 사용 사례에서 개체 생성 시 개체 전체를 반환하는 것이 왜 나쁜 방법인지 알 수 없습니다.이것은 적어도 ID를 쉽게 취득하고 관련된 경우 타임스탬프를 취득하는 데 도움이 됩니다.이것은 실제로 레일즈로 발판을 만들 때 나타나는 기본 동작입니다.

초기 POST에서 얻을 수 있는 데이터를 얻기 위해 아이디만 반환하고 그 후에 GET 요청을 하는 것은 전혀 이점이 없다고 생각합니다.

어쨌든 API가 일관성이 있는 한 자신의 요구에 가장 적합한 패턴을 선택하는 것이 좋다고 생각합니다.REST API를 구축하는 올바른 방법은 없습니다.

투고 후 다음과 같은 내용을 회신하고 싶습니다.

Response
   .created(URI("/obj/$id"))
   .entity(TheNewObj())
   .build()

상태 201 - CREATED

Header Location : 위치

엔티티 - 새 개체

언급URL : https://stackoverflow.com/questions/19199872/best-practice-for-restful-post-response

반응형