2012-10-15 4 views
3

나는 천천히 REST를 깨닫고 나에게 혼란 스럽다.REST에서 사용자 표현하기

나는 REST의 대부분이 "자원"이라는 것을 알고있다. 그래서 나는 어떤 종류의 리소스가 우리가 사용자 가입/로그인의 경우에 참조 할 것이라고 궁금해하고 있었습니까?

users입니까? 그러면 users의 POST가 새 사용자를 등록한다는 의미입니다. 그렇다면 사용자를 인증하려면 어떻게해야합니까? 암호로 고쳐 쓴 암호 또는 사용자 이름 쌍을 가진 users에 얻으 십시요?

저는 이것과 정말로 혼동합니다.

나는 일 수 있습니다. 나는 완전히 이해가 안되기 때문에, REST를 이해하기 시작했습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

2

그것은 특이한하지만 일반적인 약간의 REST 문제. 자원에 대해 계속 생각해보십시오.

로그인 할 때 특정 리소스에 액세스 할 수있는 세션을 만들도록 서버에 요청하는 중입니다. 따라서이 경우 생성 할 리소스는 세션입니다. 따라서 아마도 URL은 /api/sessions이고 세션 객체 (사용자 이름 또는 비밀번호와 아마도 UUID로 구성된 객체 일 수 있음)를 가진 URL에 대한 POST는 세션을 생성합니다. 실제 REST에서는 /api/sessions/{UUID}에 새로운 세션을 가리키고 있지만 실제로는 (보안상의 이유로) 세션 쿠키를 등록하는 것일 수 있습니다.

직접 구현하는 경우 로그인 양식에 대한 내 개인적인 접근 방식이지만이 작업에는 항상 Spring security을 사용하는 경향이 있으므로이 요구 사항에는 결코 큰 고려가 필요하지 않습니다.

+0

흠 네 세션은 의미가 있습니다. 그러나 쉼은 무국적자이므로 혼란 스럽습니다. 이 API 키는 어디에 유지 관리됩니까? UI가 있습니까? 그래서 새로운 요청이있을 때, 고객의 목록을 얻으라고 말하십시오 .. 인증과 함께이 키가 요청과 함께 전송됩니까? – Shrayas

+0

좋은 답변입니다! Btw.간단한 세션 쿠키를 사용하는 경우 세션 관리자 시스템에 클라이언트 상태를 저장하기 때문에 REST 서비스는 상태 비 저장되지 않습니다. 세션 리소스는이 문제의 유일한 해결 방법이지만 응답의 캐시 가능성을 줄입니다. 어쨌든'no-cache, no-store'를 사용하고 싶다면 완벽합니다. 'private' 캐싱을 사용하고 싶다면 더 복잡한 캐싱 시스템을 작성해야합니다. – inf3rno

-2

자원은 하나의 URI를하거나 많은 하지만 하나의 URI는 사용자를 인증 할 때 정확히 하나의 자원

따라서

는, 이미 등록 할 때하는 동안, 당신은을 해결하고 등록 된 사용자를 해결하는 것입니다 수 있습니다 아직 등록되지 않은 사용자 (자원).

필요한 것은 SERVER로 처리하는 것입니다.

이것은 SUGARCRM REST 웹 서비스 구현에서 가져온 예제입니다. REST는 SERVER에 대한 http 요청과 같습니다.

예를 들어, REST 웹 서비스를 구현할 때. 모든 REST 요청은 JSON에서

www.your_domain.com/Rest.php?json={your_json_method:'method',params:'watever'}

가 사용자를 등록 요청 사용자 {method:'SignUp', username:'abc', pass:'pass', confirm_pass:'pass'} 를 인증하기 위해 요청하는 매개 변수

로 보내는 요청라고 같은 파일을 것입니다 {method:'Login', username:'abc', pass:'pass'}

이렇게하면 원하는만큼 매개 변수를 가질 수 있습니다.

JSON을 사용하지 않아도됩니다. 당신이

+2

나는 REST의 이런 유형에 대해 들어 본 적이 없다! REST는 HTTP 요청을 서버로 전송하는 것이 아닙니다. 원래 [논문] (http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)을 로이가 읽었습니까? : – Shrayas

+0

먼저 JSON이 필요하지 않으며 이전에 말한 것처럼 간단하게 기본 아이디어를 제공했습니다. http://www.ibm.com/developerworks/library/x-sugarcrmrest/index .html 그것은 HTTP 요청에서 REST 웹 서비스의 예입니다. –

0

자료를 생성 할 수있는 쿼리에 대한 간단한 가져 오기 PARAMS를 사용, 읽기, 업데이트 및 편안한 방법을 사용하여 삭제 할 수 있습니다, 참조 예를 들면 : 당신이 될 것입니다 사용자를 관리하다 싶은 경우에 따라서 https://cwiki.apache.org/S2PLUGINS/restful-crud-for-html-methods.html

그렇게하는 편안한 접근법.

관리 데이터 세트에있는 사용자를 인증하려면 평상시 인증 메커니즘을 설계하거나 선택하려면 이 필요합니다. http://de.slideshare.net/sullis/oauth-and-rest-web-services http : //www.thebuzzmedia.COM/설계 - 어 - 보안 - 나머지-API-없이-의 OAuth 인증/

당신이 dropwizard을 확인 할 수 있습니다 이러한 문제에 JumpStart의 경우는 : http://dropwizard.codahale.com/

1

나는 비슷한 것을 연구하고 있으며, 지금까지 내가 취한 해결책이다. 모든 제안 환영합니다 :)

나는 독방 및 계정 수정을 위해 users 있습니다.

  • GET /users/{id}
  • PUT /users는 사용자 이름과 암호를 사용하여 새 사용자를 만들고 인스턴스의 프로필 페이지에 대한 사용자를 가져옵니다. 실제로 이것은 GET 방법을 사용하여 가입을 확인하는 링크가있는 이메일을 보내야합니다.
  • POST /users/{id}
  • 내가 요청 자원이 토큰 또는 인증이라고 생각하는 경향이 인증을 위해 (예를 들어, 비밀번호 변경을위한) 사용자
  • DELETE /users/{id}

을 수정한다. anti-RESTful이되어야하기 때문에 "session"이라는 단어를 피하려고했지만 클라이언트를위한 실제 서버 측 세션의 환상을 만들면 괜찮습니다.

  • PUT /authentication/ usename/password는 user_id/hashed 값 쌍으로 Set-Cookie를 반환합니다. 아마 POST이어야합니다. 확실하지 않음
  • DELETE /authentication/{user_id}은 쿠키를 삭제하기 만하면 사용자가 로그 아웃됩니다. 아마도 user_id 대신 고유 한 token_id이어야합니다.
+0

예. 나는 지금과 같은 다음과 같습니다 :) – Shrayas