我有一个登录名,我需要执行以下操作:
1. POST .../authentication/login
2. POST .../authentication/verifyToken
3. POST .../authentication/forgotPassword
但是,正如我读到的那样,这种结构不好,因为它包含动词而不是名词。
我试图做这样的事情:
1. POST .../sessions/new
2. GET .../sessions/:token
3. GET .../sessions/forgot
1. Will create a new token, based on phone and password correct credentials.
2. Will verify the token validation or expiration.
3. Will send a SMS within a new password or a new temporary password reset code.
第一个方法不是REST。但它完全清楚。 您可以阅读该URL并确切了解它将要做什么。您不需要任何解释。
但是,越来越多的文章说REST中的动词不是RESTFUL,因此不是实现的好习惯。
处理此问题的正确方法是什么?
答案 0 :(得分:1)
REST不在乎您为资源标识符使用什么拼写。
但是,正如我读到的那样,这种结构不好,因为它包含动词而不是名词。
结构是 fine 。
您可以阅读该URL并确切了解该怎么做。
对-REST不在乎您是否可以阅读URL并了解它的作用。
URL / URI是标识符,就像程序中的变量名是标识符一样。编译器并不特别在意您的变量是命名为accountBalance
,purpleMonkeyDishwasher
还是x
。我们的编码标准中描述的拼写是针对人类读者的,hackable urls也是如此。
但是,越来越多的文章说REST中的动词不是RESTFUL,因此不是实现的好习惯。
REST是architectural style
作为基于网络的应用程序的体系结构样式,其定义在论文中逐步提出,作为对设计约束的积累,这些约束是从九种先前存在的体系结构样式和五个Web独有的其他约束中衍生的
字段描述了his thesis中的约束;任何声称标识符中的动词“不是RESTful”的动词都应能够指出其违反的特定约束。
我还没有看到令人信服的论点,即标识符拼写违反了任何REST约束。
答案 1 :(得分:0)
首先,我将不使用术语 session 。这意味着服务器端状态,这是REST要求的无状态通信中的问题。
因此,可以通过对资源进行建模来解决您的问题,
GET ./authentication/token
如果请求标头中提供了有效的凭据,请获取一个令牌。
GET ./authentication/password
如果请求标题中提供了电子邮件地址,则获取新的临时密码。
您还可以使用POST
来在请求正文中传输值。
请注意,如果结果是通过SMS发送的,则服务应以HTTP 204
进行回答。