REST API Endpoint用于通过多步骤过程更改电子邮件并更改密码

我需要帮助来创buildREST端点。 有几个活动:

要更改电子邮件,需要3个URL请求:

  1. / changeemail:这里一次性密码(OTP)发送给用户的手机

  2. / users / email:用户从上一步发送一次性密码,系统发送邮件给新用户点击邮件激活链接

  3. / activateemail:用户点击新电子邮件收件箱中的链接,服务器更新新电子邮件

要更改密码:

  1. /用户/密码(PATCH):用户提交旧密码和新密码,系统相应更新新密码

同样,还有其他的端点改变configuration文件(字段包括bday,名字和姓氏)

在网上阅读后,我相信我的系统只有users作为资源 – >所以要更新的属性,我想使用一个PATCH更改电子邮件和更改密码,以及像操作领域的东西,所以上述两个function将看起来喜欢 :

要更改电子邮件

  1. 操作:'sendOTPForEmailChange'
  2. 操作:'sendEmailActivationLink'
  3. 操作:'activateEmail'

用于更改密码:

  1. 操作:'changePassword'

而且对于以上所有操作(在nodejs中),我将只有一个端点:

 app.patch('/users', function (req, res) { // depending upon the operation I delegate it to the respective method if (req.body.operation === 'sendOTPForEmailChange') { callMethodA(); } else if (req.body.operation === 'sendEmailActivationLink') { callMethodB(); } else if (req.body.operation === 'activateEmail') { callMethodC(); } else if (req.body.operation === 'changePassword') { callMethodC(); } else sendReplyError(); }); 

这听起来不错吗? 如果没有,有人可以帮助我形成changeemail和changepassword的端点。

我终于决定使用PATCH和HTTP Request Body中的操作字段来指示要执行什么操作。 由于我只修改资源的单个字段,我使用了PATCH方法。 此外,我想避免在URI中使用动词,所以使用“操作”字段看起来更好。

我在做这个决定时使用了一些参考文献:

Wilts 在这里回答链接

马克诺丁汉“的博客链接文章

最后是JSON MERGE PATCH 链接RFC

您应该制定定义特定资源的链接,避免使用PATCH并在一个链接中添加所有逻辑,使事情变得简单,并使用API​​中的关注点分离

 1- /users/otp with HTTP Verb: GET -> to get OTP for any perpose 2- /users/password/otp with HTTP Verb: POST -> to verify OTP for password and sending link via email 3- /users/activate with HTTP Verb: POST to activate the user 4- /users/password with HTTP Verb: PUT to update users password 

哈希安全是一个必须阅读,恕我直言,你是否想要实现自己的用户帐户系统。
应始终考虑双因素鉴定,至less应作为select性特征。 你将如何将它整合到你的login计划?
身份联合呢? 你的用户可以利用他们的社交账号来使用你的应用

Google快速浏览了这一点 以及 这一点 , 以及这一点 。

除非您有自己的理由,否则我会花时间整合一个由强大的社区支持的解决scheme,用于项目的效用方面,并将时间集中在为您的客户实现业务价值上。

注:我的文字太长了评论

大多数人同意古拉姆的回答,关切的分离是关键。 我build议稍微不同的端点如下:

 1. POST /users/otp -> as we are creating a new OTP which should be returned with 200 response. 2. POST /users/email -> to link new email, request to include OTP for verification. 3. PUT /users/email -> to activate the email. 4. PUT /users/password -> to update users password.