REST API使用名词而非动词进行URI命名的正确方法是什么?

时间:2018-08-06 07:07:14

标签: node.js rest api

我有一个登录名,我需要执行以下操作:

1. POST .../authentication/login

2. POST .../authentication/verifyToken

3. POST .../authentication/forgotPassword
  1. 会要求提供电话和密码。
  2. 将要求提供身份验证令牌。
  3. 会要求提供电话和密码。

但是,正如我读到的那样,这种结构不好,因为它包含动词而不是名词。

我试图做这样的事情:

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,因此不是实现的好习惯。

处理此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

REST不在乎您为资源标识符使用什么拼写。

  

但是,正如我读到的那样,这种结构不好,因为它包含动词而不是名词。

结构是 fine

  

您可以阅读该URL并确切了解该怎么做。

对-REST不在乎您是否可以阅读URL并了解它的作用。

URL / URI是标识符,就像程序中的变量名是标识符一样。编译器并不特别在意您的变量是命名为accountBalancepurpleMonkeyDishwasher还是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进行回答。