我参加了一个开发者大会,演讲者认为以下一组 URL 不是 RESTful:
/users/username/changepassword
/users/username/resetpassword
给出的主要原因是相同的 URL 可能在不同的上下文中使用,这并没有以有意义的方式促进 HATEOAS。然后他继续争辩说,更可行的方法是使用以下 URL:
/account/changepassword
/administration/server/users/username/resetpassword
根据演讲者的说法,后一种方法允许每个用例为每个 URL 提供一个专门定制的 (html-) 表单,然后可以将其发布到同一个 URL。在不同的上下文中使用相同的 URL 不再有问题。
我会自发地说,这些 URL 集都不是 RESTful 的,仅仅是因为它们都以动作(动词)为中心,在我看来,除了特殊情况(如搜索)之外,这些动作(动词)并不真正符合资源的条件。我觉得这个设置很像 RPC。
我会建议一些更像名词和颗粒状的东西
//Change password
PUT /users/username/account/password
//Register reset
POST /users/username/account/password/resets
//Verify reset
PUT /users/username/account/password/resets/0/verification_code
你有什么意见?演讲者是否接近 RESTful,或者这里没有足够的信息?