如何在"面向操作"方法的RESTful Web服务中创建路径?

Luc*_*uke 1 java rest spring spring-mvc java-ee

我正在创建一个RESTful Web服务,我尝试遵循约定和推荐来创建一个良好的Web服务.现在我已经停止了.我的系统中有一个用户实体,我有常规的CRUD路径.我想公开一个API来处理忘记的密码.它将在请求中使用用户名,然后检查它是否找到用户.如果是,它将更改密码并将密码更改为自动生成的密码并向用户发送电子邮件.

我读到这个:与实体不对应的RESTful动作/服务?我看到我也许应该开始将非数据库实体视为资源.

但是我在API中找到忘记密码的概念仍然存在问题.

我可以为路径命名什么,以及适合它的HTTP方法是什么?是否应该使用PUT,因为它会用新密码更新用户?

acd*_*ior 5

我想公开一个API来处理忘记的密码.它将在请求中使用用户名,然后检查它是否找到用户.如果是,它将更改密码并将密码更改为自动生成的密码并向用户发送电子邮件.

如果你真的想成为RESTful:

我可以为路径命名什么,以及适合它的HTTP方法是什么?

它不是a PUT或a GET,因为它们是幂等方法(意味着你执行一次或10次应该给出完全相同的结果)并且你想要的不是:如果请求10次,将生成10个不同的密码.

还有其他原因,但上述内容很简单,不容置疑.所以POST它是.

关于URL,因为password可以被认为是子资源的(的一部分)user,考虑到对网址user资源http://www.example.com/rest/user,是有意义的设计密码的网址为:

http://www.example.com/rest/user/password
Run Code Online (Sandbox Code Playgroud)

这样,如果有人想设置密码,他应该PUT使用新密码发送到该URL(幂等行为!).

现在是一个密码重置操作,我将它POST设置为该URL,可能还有一些更具体的内容,如password-reset一些必要的关键字(可能是一个秘密问题的答案)POST.如果没有提供该内容,400 Bad Request则应采取适当的回应.如果请求者尝试过多,403 Forbidden则应在"重试等待期间"发出a .不用说,无论是PUTPOST一个安全的加密(HTTPS,任何人吗?),通道内应该发生.