2010-08-14 6 views
1

Restlet API 집합을 가장 잘 레이아웃하는 방법을 알아 내려고하고 있습니다. 나는 표준 엔티티 CRUD를 가질 수있는 User 엔티티를 가지고있다.이 엔티티는 안락하게 잘 어울리지 만, "리셋 패스워드"나 "종료"와 같은 것들도있다.한 엔터티에서 여러 작업을 다시 시작하십시오.

무엇을 배치하는 가장 좋은 방법은 무엇입니까?

/1.0/user/update  //perhaps this would just be a PUT on /1.0/user 
/1.0/user/resetPassword //This would reset the password, but also send an email. 
/1.0/user/terminate  //This might do some additional cleanup 

가 그럼 난이 (사이비)처럼 보일 수 있습니다 정말이

/1.0/user/{actionType} 

그리고 처리 코드와 같은 첨부 것이라고 된 UserResource을 만들 것 : 여기

내가 무슨 생각입니다

action = request.getAttributes().get("actionType"); 
if (action == "update") { 
    do update 
} elif (action == "resetpassword") { 
    do resetpassword 
} elif (action == "terminate") { 
    do terminate 
} 

정말 좋지 않습니까? 정말 닌자 아이디어?

답변

1

나는 괜찮은 생각이라고 생각합니다. 응용 프로그램을 RESTful하게 만들려면 사용자 자원에 대한 표현에 링크를 제공하고 선택한 작업을 수행하는 URI로 문서화해야합니다.

썬 클라우드 API does just this :

  • VM을 GET 함수는
  • 클라이언트가 미디어 유형에 대해 알고 (description of the VM media type 참조) 수행의 URI는 "컨트롤러"(컨트롤러를 인식을 포함하여 표현 VM을 반환 특정 VM 당신으로

그래서 바로이 때문이다 예를 들면 VM이 "시작"제공은, 제어 자원의

  • URI 등 "중지" 당신이 /1.0/user/resetPassword 또는 /1.0/user?op=resetPassword 또는 /1.0/resetPassword?userId=xyzzy을 조금이라도 사용한다면, 클라이언트 이 실제로는은주의해서는 안되기 때문에, 단지 표현의 링크를 따르기 만합니다.

    또한 일반적으로 멱등수가 아니며 부작용이있을 수 있으므로 이러한 작업에는 POST를 사용해야합니다.

  • +0

    '/1.0/user? op = resetPassword'는'/1.0/resetPassword? userId = xyzzy'와 마찬가지로 RESTful과 거리가 멀습니다. RESTful RPC over HTTP가 없습니다 –

    +0

    @JarrodRoberson 죄송합니다, 저는 정중하게 반대합니다. 클라이언트가

    으로 이동 한 다음 GET /1.0/user?op=resetPassword를 생성하면 RPC와 멀리 떨어져 있습니다. RPC vs REST는 URI의 형식이나 구조에서 * 아닙니다 *이며, 클라이언트가 URI를 파악하고 클라이언트에서 하드 코딩되었거나 런타임에 발견되었는지 여부에 따라 달라집니다. – mogsie

    1

    어때?

    PUT /user/bob 
    DELETE /user/bob/password 
    DELETE /user/bob 
    

    그리고 클라이언트가 다른 문서에서이 URL을 발견해야한다는 mogsie의 요점을 잊지 말고 사전에 알 필요가 없습니다.

    +0

    새로운 암호를 얻으려면 암호를 삭제하는 것이 아주 명백하다고 나는 말하지 않을 것입니다. 그러나 하나의 암호를 삭제하면 다른 URI에서 새 암호 자원이 생성되므로 각 암호가 자체 자원 인 경우에는 멱등하지 않을 수 있습니다. 다시 삭제하면 아무런 영향을 미치지 않습니다.흥미로운 아이디어. – mogsie

    관련 문제