인턴과정에서 사수님이 비밀번호 찾기에 대해 API를 설계하는데
말랑한 아이디어를 얻고자 나에게도 좋은 아이디어 있으면 공유하기를 부탁하였다.
혹시 RESTAPI에 대해 아직 애매한 부분이 있다면 참고
https://gyuturn.tistory.com/44
[API] RESTFUL API ??
웹개발을 하다보면서 API에 대해서 자연스럽게 알게되었다. 하지만 나아가 RestfulAPI라는것도 들어보았는데, 정확한 정의가 서지 않아 정리하고자 한다. API(Application Programming Interface) API(applicatio..
gyuturn.tistory.com
비밀번호 찾기를 RESTAPI로 설계?
물론 RESTAPI로 설계를 안하면 설계하는 입장에서는 편할 수 있다.
하지만 REST로 설계를 한다면 일관성 있는 API를 제공할 수 있기에 아이디어를 적어보자 한다.
내가 생각한 아이디어는 다음과 같다. (어떠한 stackOverFlow 참고함)
PUT /api/v1/passwd
body{
"email":String optional
"new Password":String optional
"passwd Token": String optional
}
비밀번호 찾기에는 해당 API만을 사용할 계획이다.
1. 이메일인증(핸드폰 인증도가능)
첫번째로는 이메일인증을 받는다.
위의 API에다 요청
body에는 email값만을 보내 요청한다.
2. 비밀번호 변경
인증을 통해 받은 이메일에는 token값을 url로 담은 password 변경 UI를 제공한다.
ex)url: www.google.com/passwd/?token="!@#!$!@#!@#124132312"
해당 토큰은 비밀번호 찾기를 요청한 유저의 id값의 hash값을 사용하던지,혹은 임의의 값을 사용한다.
해당 UI에서 '재설정하기'버튼시 필요한 body값
body{
"new Password":String optional
"passwd Token": String optional
}
3. 비밀번호 변경 확인
해당 token이 아직 유효하다면 비밀번호 변경이 성공되면 알맞은 statusCode를 return한다.
이때 return값의 body로 해당 내용을 보여줄 필요는 없다.
고려할점
- token을 DB에 저장
해당 token은 비밀번호 재설정을 위함이며 기간이 있는 token이다 해당 값을 DB에 넣는것은 비효율적일 수 있다.
- 클라이언트가 중간에 이탈한다면?
1번 과정에서 이탈은 괜찮다. -> 아직 업데이트 되기 전 임으로 변경되지 않음
즉, 이메일로 받은 url을 통해 submit하기 전까진 비밀번호가 업데이트 되지 않는다.
- REST한가??
만약 유효기간이 지난 token을 사용하여 '비밀번호 업데이트'를 한다면? -> 클라이언트는 비밀번호 요청을 보냈는데 (만약 에러가 났을시)변경이 안되었다는 상태를 서버로 부터 받을 수 있다. 이건 REST하지 않은것 같다...
(PUT에서의 REST는 멱등성을 보장해야한다.... -> POST로 변경해야 하는것인가에 대한 의문이 듦)
- 클라이언트가 여러번 메일 요청을 보낸다면?
프론트단에서 메일 요청이 여러번 허용가능하지않도록 막야아한다
음 완전한 RESTAPI는 아닌것 같지만 설계르 통해 RESTAPI에 대해 다시한번 생각하게 된다.
'cs' 카테고리의 다른 글
[API] REST API ?? (0) | 2022.10.20 |
---|