RESTful 방식으로 리소스 "편집" 양식을 어떻게 구현합니까?

StackOverflow https://stackoverflow.com/questions/46004

  •  09-06-2019
  •  | 
  •  

문제

우리는 현재 가지고 있는 애플리케이션에 REST API를 구현하려고 합니다.REST API를 사용하여 다양한 리소스에 대한 읽기/쓰기 기능을 공개하려고 합니다.이것의 "양식" 부분을 어떻게 구현합니까?기본적으로 메서드 호출로 작동하고 데이터를 반환하는 RESTful URL을 생성하여 데이터의 "읽기"를 노출하는 방법을 알아봅니다.

GET /restapi/myobject?param=object-id-maybe

...일부 데이터 구조를 나타내는 XML 문서가 반환됩니다.괜찮은.

그러나 일반적으로 웹 애플리케이션에서 "편집"에는 두 가지 요청이 포함됩니다.하나는 리소스의 현재 버전을 로드하고 해당 데이터로 양식을 채우는 것이고, 다른 하나는 수정된 데이터를 다시 게시하는 것입니다.

하지만 REST가 일종의 매핑되는 HTTP 메서드로 동일한 작업을 수행하는 방법을 알 수 없습니다.PUT이군요, 그렇죠?누군가 이것을 설명할 수 있나요?

(추가 고려사항:UI는 주로 AJAX로 수행됩니다)

-- 업데이트:확실히 도움이 됩니다.그런데 아직도 서버 측에 대해 조금 혼란스러워요?분명히 여기서는 단순히 파일만 다루는 것이 아닙니다.서버에서 요청에 응답하는 코드는 요청 메서드를 필터링하여 어떻게 해야 할지 결정해야 합니까?읽기와 쓰기 사이의 "전환"입니까?

도움이 되었습니까?

해결책

일반 HTML을 통해 데이터를 제출하는 경우 POST 기반 양식만 수행할 수 있습니다.POST 요청이 전송되는 URI 해서는 안 된다 수정 중인 리소스의 URI여야 합니다.매번 새로 생성된 리소스를 추가하는 컬렉션 리소스에 POST를 수행해야 합니다(새 리소스에 대한 URI를 사용하여 위치 헤더와 202 상태 코드) 또는 요청의 콘텐츠(또는 사용자 정의 헤더)에 제공된 URI로 리소스를 업데이트하는 업데이터 리소스에 대한 POST입니다.

XmlHttpRequest 객체를 사용하는 경우 메서드를 PUT으로 설정하고 데이터를 리소스의 URI에 제출할 수 있습니다.서버가 아직 존재하지 않는 리소스에 대해 유효한 URI를 제공하는 경우 빈 양식에서도 작동할 수 있습니다.첫 번째 PUT은 리소스를 생성합니다(반환 202).후속 PUT은 동일한 데이터인 경우 아무 작업도 수행하지 않거나 기존 리소스를 수정합니다(두 경우 모두 200 오류가 발생하지 않는 한 반환됩니다.)

다른 팁

사용할 수 있는 다양한 대안이 있습니다.좋은 솔루션이 제공됩니다. 마이크로포맷 위키 RESTful JSON 팀에서도 참조했습니다.실제로 표준에 도달할 수 있을 만큼 가깝습니다.

 Operate on a Record

GET /people/1
    return the first record 
DELETE /people/1
    destroy the first record 
POST /people/1?_method=DELETE
    alias for DELETE, to compensate for browser limitations 

GET /people/1/edit
    return a form to edit the first record 
PUT /people/1
    submit fields for updating the first record 
POST /people/1?_method=PUT
    alias for PUT, to compensate for browser limitations 

웹 UI와 데이터 서비스를 분리해야 할 것 같습니다.데이터 서비스를 제공할 때 브라우저가 지원할 수 없는 동사(예: PUT 및 DELETE)의 사용을 포함하여 RESTful 시스템이 완전히 적합합니다.

UI를 설명할 때 대부분의 사람들은 "RESTful"과 "예상하고 예측 가능한 URL"을 혼동하는 것 같습니다.웹 UI를 설명할 때 순수 RESTful URL 구문에 대해서는 그다지 걱정하지 않습니다.

로드는 일반적인 GET 요청이어야 하며, 새 데이터 저장은 현재 데이터가 있는 URL에 대한 POST여야 합니다.

예를 들어 다음에서 현재 데이터를 로드합니다. http://www.example.com/record/matt-s-example 그런 다음 데이터를 변경하고 새 데이터가 포함된 동일한 URL로 다시 POST하세요.

새 레코드를 생성할 때 PUT 요청을 사용할 수 있습니다(예:현재 존재하지 않는 URL에 데이터를 PUT하세요. 그러나 실제로는 그냥 POST하는 것이 아마도 시작하기에 더 나은 접근 방식일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top