【问题标题】:REST API what is the proper way of URI naming using nouns and not verbs?REST API 使用名词而不是动词命名 URI 的正确方法是什么?
【发布时间】:2018-08-06 07:07:14
【问题描述】:

我有一个登录名,我需要做这样的事情:

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,因此不是一个好的实践。

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

【问题讨论】:

  • 为什么你认为 REST POST 不应该在 URL 中使用动词?我想知道你是从哪里得到这个概念的?
  • @jfriend00 REST API 不应该在端点名称中使用动词。参见例如this stackoverflow postthis stackoverflow post

标签: node.js rest api


【解决方案1】:

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

但正如我所读,这种结构并不好,因为它包含动词而不是名词。

结构很好

您可以阅读 URL 并准确了解它要做什么。

是的——REST 不关心你是否可以阅读 URL 并理解它要做什么。

URL/URI 是标识符,就像程序中的变量名是标识符一样。您的编译器并不特别关心您的变量是命名为accountBalancepurpleMonkeyDishwasher 还是x。我们的编码标准中描述的拼写是供人类阅读的,hackable urls 也是如此。

然而,越来越多的文章说 REST 中的动词不是 RESTFUL,因此不是一个好的实践。

REST 是一个architectural style

作为基于网络的应用程序的架构风格,它的定义在论文中逐步呈现,作为设计约束的累积,这些设计约束源自九种预先存在的架构风格和五种 Web 独有的额外约束

Fielding 描述了his thesis 中的约束;任何声称标识符中的动词“不是 RESTful”的人都应该能够指出他们违反的特定约束。

我还没有看到一个令人信服的论点,即标识符拼写违反了任何 REST 约束。

【讨论】:

    【解决方案2】:

    首先我不会使用术语会话。这意味着服务器端状态,这在 REST 要求的无状态通信中存在问题。

    所以你的问题可以通过建模资源来解决,可能像:

    GET ./authentication/token
    

    如果请求标头中提供了有效凭据,则获取 令牌

    GET ./authentication/password
    

    如果请求标头中提供了电子邮件地址,则获取一个新的临时密码

    您还可以使用POST 在请求正文中传输值。

    请注意,如果结果是通过 SMS 发送的,该服务应使用 HTTP 204 进行回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2019-02-12
      • 2019-09-27
      • 2023-03-11
      • 2016-04-26
      相关资源
      最近更新 更多