2017-09-12 3 views
0

작은 REST API를 개발 중입니다.REST API에서 사용자 비밀번호 변경

{ 
    email: String, 
    password: String, 
    first_name: String, 
    last_name: String, 
    age: Number, 
    location: String 
} 

은 내가 보안상의 이유로 password 필드를 제외한 모든 필드를 반환하고있어 특정 사용자 리소스를 쿼리 : 내 데이터베이스에서이 필드가 사용자 자원을 가지고있다.

이제 사용자가 자신의 개인 정보와 암호를 업데이트 할 수 있도록 클라이언트 측에서 양식을 만들고 싶습니다. 비밀번호 변경 양식에는 old_passwordnew_password의 두 입력이 있습니다.

여기 내 의심이 따릅니다. 모든 필드를 보내고 사용자를 업데이트 할 수 있도록 PUT 메서드가 필요합니다. 그러나 old_passwordnew_password은 거의 채워지지 않으므로 사용자가 PUT 요청을 할 때마다 서버로 보낼 수 없습니다.

  • 가끔 두 필드를 PUT 방법으로 보내 주시겠습니까? RESTful인가?

  • 다른 아이디어는 두 필드로 PATCH 메소드를 사용하고 사용자 비밀번호 만 업데이트하는 것입니다. 하지만 내 PUT 메서드는 사용자 암호를 업데이트하지 않고 제대로 올바르게 사용되지 않습니다.

가장 유용한 방법은 무엇입니까? 감사합니다. .

답변

0

예 값이 없으면 기본값을 설정하거나 서버에 플래그를 사용하여 값이 존재하는지 확인할 수 있습니다. 하지만 .. PUT은 리소스에 완전한 객체를 전달해야합니다. 이것의 주된 이유는 PUT이 멱등수가되어야한다는 것입니다. 즉, 반복되는 요청은 서버에서 동일한 결과로 평가되어야합니다. 부분 업데이트를 허용하면 더 이상 idem-potent가 될 수 없습니다.

부분적으로 구조를 업데이트 할 수있는 PATCH 방법을 사용하십시오. 리소스에 대한 부분 수정을 보냅니다. 리소스의 한 필드 만 업데이트해야하는 경우 PATCH 메서드를 사용할 수 있습니다.

+0

그러나 때로는 전체 리소스를 업데이트하고 때로는 업데이트하지 않습니다. 이건 RESTful하지 않니? –

+0

나는 내 대답 – karthik006

+0

을 업데이트했습니다. 좋습니다. 그럼, 두 가지 방법이 필요합니다. PUT은 전체 리소스를 업데이트하고 PATCH는 암호 만 변경합니다. 이것이 내 생각이지만, PUT에서는 암호를 보내지 않으므로 전체 리소스를 업데이트하지 않습니다. 이거 괜찮아? –

0

우리는 '비밀번호'리소스를 만드는이 문제를 해결했습니다. 이 리소스에 대한 URL은 다음과 같습니다.

/users/x/password 

PUT 만 지원됩니다. 다른 요청은 405 오류가 발생합니다.