我正在为我的用户构建一个Restful API。
我有这些
1. GET -> Users/{id}这是通过id
获取2. POST -> Users/{DTO}这是添加
3.PATCH/PUT -> Users/{DTO}用于更新信息
4. DELETE -> Users/{id}删除
5. DELETE -> Users/{username}/reset_pass重置密码
6. POST -> Users/?username={username}&password={password}
所以我对5号和6号(特别是6号)有点不确定。
我想知道你对这件事的看法。在Body中以查询字符串发送我的用户密码。
我认为Uber使用了我重置密码时使用的模式。你觉得怎么样?
谢谢
4. DELETE -> Users/{id} Removing
5. DELETE -> Users/{username}/reset_pass Reset Password
- 不一致。您可以通过用户id或用户名进行标识。如果两者都需要,请使用不同的URL命名方案。
-
reset_pass
是动词。考虑使用DELETE Users/{id}/password
。根据密码发生的情况,DELETE
可能适合也可能不适合用例。
6. POST -> Users/?username={userName}&password={password}
同样,这与URL格式不一致。如果您想为用户创建新密码,请使用POST Users/{id}/password
。
我想知道你对这件事的看法。在Body中以查询字符串发送我的用户密码。
将其建模为请求体更简洁,但是在安全性方面没有区别。除非您使用HTTPS
,否则任何人都可以嗅探到HTTP POST
,无论您决定将数据传递到请求的哪个位置。
这只是我的观点,但是在#6上,也许把密码放在POST
请求的JSON体中会更好。这样它就不是直接在URL中(我认为REST原则说,当你POST
时,你应该让主体成为被发布的对象)。
当然,这些密码应该已经散列了,所以这不是什么大问题,但它看起来更安全/更好。