2012-04-23 4 views
13

잠시 동안 RESTful 서비스에 대한 기사를 읽었으며 리소스에 대해 VERBS를 사용하는 것이 중요하다는 것을 알고 있습니다.RESTful 서비스의 사용자 지정 동작

그러나 내가 이해하지 못한 한 가지가 있습니다. CRUD의 일부가 아닌 특정 액션을 호출해야한다면 어떻게 될까요?

예를 들어, 나는 점프를하고 싶다고 생각해. 어떤 형식을 사용해야합니까?

다음 중 RESTful입니까?

http://host/cats/123/jump 

답변

9

cats/123은 자원이 다음에 대해 이런 식으로 생각 나타내는 경우 : 해당 자원이 많은 상태를 가질 수 있습니다 (소변, 산책 점프, 수면, 식사, ...). REST 아키텍처 스타일을 사용하여 API를 디자인 할 때, 클라이언트 응용 프로그램이 상태를 변경할 수있는 자원에 대한 허용 가능한 요청을 허용 할 수 있습니다.

cats/123의 컨텍스트에서 자원 상태가 변경되는 일련의 POST 요청을 통해이를 수행 할 수 있습니다. REST에서 하이퍼 미디어 기능을 이용하면 아래와 같은 요청 및 응답과 같은 프로세스를 생성 할 수 있습니다. 허용 링크는 POST에 대한 응답으로 변경됩니다. 또한 클라이언트 응용 프로그램은 Href 속성에 포함 된 실제 URI가 아니라 Links 배열에 포함 된 속성을 코딩합니다.

요청 :

GET cats/123 

응답 :

{ 
    "Color" : "black", 
    "Age" : "2", 
    "Links":[ 
    { 
     "Food":"kibbles", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Feed the cat" 
    }, 
    { 
     "Scare":"yell real loud", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Scare the cat" 
    }] 
} 

요청 :

POST cats/123 

{ 
    "Food":"kibbles" 
} 

응답 :

{ 
    "Color" : "black", 
    "Age" : "2", 
    "Tummy" : "full" 
    "Links":[ 
    { 
     "Sleep":"lap", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Pet the cat" 
    }, 
    { 
     "Scare":"yell real loud", 
     "Method":"POST", 
     "Href":"http://cats/123", 
     "Title":"Scare the cat" 
    }] 
} 
+1

+1. 감사. 하지만 우리는 POST 대신 리소스를 업데이트하기 위해 PUT을 사용해야한다고 생각했습니다. POST가 생성에 사용되어야한다고 읽었습니까? – SiN

+0

아쉽게도 REST 아키텍처 스타일에 대한 토론 ("인수")은 HTTP 사양 및 HTTP 사양을 이해하는 데 중점을 둡니다. 간단히 말해서, [HTTP spec] (http://www.ietf.org/rfc/rfc2616.txt)에 따르면 PUT 메소드는 * 전체 리소스 표현 (클라이언트가 업데이트 한 엔티티)을 서버가 클라이언트의 최신 버전을 가지고 있다고 가정 할 때 현재 자원 표현을 대체 할 수 있습니다. 문제의 "행동"은 리소스를 업데이트 된 버전으로 대체하는 대신 상태 전환을 요청하는 것입니다. –

+0

{Ran out of space :)} 또한 POST는 자원 표현을 한 상태에서 다른 상태로 전환시키는 허용 된 방법입니다. –

관련 문제