2010-03-15 1 views
14

일반 엔티티 상호 작용을 수행하는 데 REST를 사용하는 방법을 이해합니다. URL 이름을 사용하여 엔티티에 매핑하고 HTTP 동사를 사용하여 해당 엔티티의 작업에 매핑합니다. 그러나 RPC와 같은 "행동"을 보는 일반적으로 인정되는 방법은 무엇입니까?REST 서비스 - 비 데이터 "액션"노출

예를 들어 기기 재설정을위한 명령을 보내겠습니까? 실제 "엔티티"가 없거나 POST와 같은 작업을 수행합니까? http://mydevice/device/reset?

답변

13

/device/reset 또는 /system/reset은 정상입니다.

REST "디자인 패턴".. 당신이 할 수있는 모든 동사를 사용하지하는 것이 좋습니다 않습니다

POST http://mydevice/system/state  
<stateType>RESET</stateType> 

관련 정보 :

+1

예, 가능한 해결책입니다. –

2

일반적으로 엔티티 이름을 "시스템"또는 이와 비슷한 이름으로 지정합니다. 그래서 "/ system/reset"을 수행합니다. 당신은 너무 작동하도록 장치를 선택했습니다.

하지만 실제로 이러한 유형의 작업은 POST 메서드를 사용하는 업데이트로 간주됩니다. 따라서/기기/리셋으로 POST 할 수 있다고 생각합니다.

+0

웃기는 당신은 PUT/POST에 열쇠를 넣어야합니다. 나는 그것에 대해서도 물었습니다 : http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447714#2447714 – ctacke

+0

나는 그것에 대해 언급 할 것이지만 모든 클라이언트가 PUT/DELETE를 처리하지는 않기 때문에 REST 변형을 사용한다. REST에 대한 위키피디아 페이지 읽기 : http://en.wikipedia.org/wiki/Representational_State_Transfer – Seaux

+0

예, 위키 백과 문서를 읽었습니다. 서비스와 클라이언트를 모두 제어하기 때문에 4 개의 동사를 모두 사치스럽게 사용할 수 있습니다. – ctacke

9

POST를 사용하는 경우는 아닌 것 같습니다. "RESET 액션"은 멱등 액션입니다 (n 번 호출하면 항상 같은 결과를 얻을 수 있습니다). 따라서 IMHO에서는 POST 대신 PUT 호출을 사용해야합니다 (POST는 멱등수가 아닙니다). 당신은 자원을 가하고 있습니다로

또한, 당신은

PUT http://system 
<device> 
    <status>RESET</status> 
</device> 

또는

PUT http://system/status/reset 

사용할 수 있습니다하지만 당신은 자원을두고 있기 때문에 나는 첫번째 하나가 "더 편안"생각 두 번째는 URL 만 사용합니다.

+0

그래서 PUT은 UPDATE이고 POST는 INS 정의입니다 (Sun 정의 대신 IBM). 이것을보십시오 : http://stackoverflow.com/questions/2447677/rest-verbs-which-convention-is-correct/2447740#2447740 – ctacke

+0

정말로. CRUD에 대해 생각해 보면이 비유를 사용할 수 있습니다. INSERT 및 UPDATE가있는 경우 POST 및 PUT을 각각 사용해야합니다. 그러나 멱등은 그 이상입니다. 데이터베이스에 한 번만 삽입 할 수있는 리소스가 있으며 변경해서는 안됩니다. 그건 삽입과 멱등 원 행동입니다. 그래서이 상황에서 나는 PUT이 사용될 것이라고 생각합니다. –

+2

비어있는 본문을 사용하여 http : // system/status/reset을 실행하면 비어있는 리소스가 업데이트됩니다. 첫 번째는 올바른 RESTful 방법입니다. –