【问题标题】:Is REST API created by Sails.js really RESTful and following the convention?Sails.js 创建的 REST API 真的是 RESTful 并遵循约定吗?
【发布时间】:2015-04-20 17:21:11
【问题描述】:

根据我正在阅读的一本书和几篇文章,指定 REST API 的方法是利用大多数 HTTP 方法,而不是通过隧道 GET 方法创建,它在 Sails.js 的演示中如何显示,你可以只需向

发出 GET 请求即可创建模型实例
/modelName/create?property=value

嗯,这根本不是 RESTful。相反,我们应该向 /modelName 发出 PUT 请求。或者,我在这里遗漏了什么?

【问题讨论】:

  • 你是完全正确的。一个 get 请求应该是一个 safe (nullipotent) 方法,无论调用多少次都应该返回或多或少相同的数据结构,但更重要的是,不应自行修改数据结构.
  • Github Issues 可能是发布此问题的正确位置。
  • 您还可以在我们的 gitter 聊天室中获得sails.js 的实时社区支持:gitter.im/balderdashy/sails

标签: javascript node.js rest sails.js watermark


【解决方案1】:

在 REST API 中,用户创建几乎所有资源的方式有两种。

  1. POST 指向将包含新资源的集合:

    [Request]
    POST /gizmos
    {
        "name": "widget"
    }
    
    [Response]
    201 Created
    Location: /gizmos/71
    
  2. 或者一个PUT的新资源直接到它的位置:

    [Request]
    PUT /gizmos/71
    {
        "name": "widget"
    }
    
    [Response]
    204 No Content
    

通过GET /gizmos/create 创建资源是不好的。

  • GET 不应更改服务上的任何内容。执行 0、1 或 1000 次都应该有相同的效果:没有效果。
  • URL 中不应包含动词。 URL 应该是一个名词。 HTTP 方法 - GETPOSTPUTDELETE - 是动词。

【讨论】:

  • 是的,没错!因为安全性和幂等性。我知道,但仍然很困惑为什么 API 是这样自动创建的(在 GitHub 上有很多星星),并且想知道我是否在这里遗漏了什么。
【解决方案2】:

是的,你是。您从演示中学到的是从浏览器 url 栏访问休息操作的快捷方式或助手,这根本不是休息。它用于测试目的(默认启用),不应在生产中使用。

使用 http 动词向您的控制器发出请求,例如对/user/1DELETE 请求将删除ID 为1 的用户。这非常安静。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2019-11-19
    • 2018-02-10
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多