3

我最近读了很多书,甚至更多地尝试了 Web 开发。有些事情我根本无法理解,因此不胜感激。

我不是想为我完成我的家庭作业。我的知识有一些漏洞,我想填补。请帮我谈谈你的看法:)

REST 问题:阅读文档这是完全可以理解的(NODE.JS / Express)示例:

示例一(获取):

app.get('/', function(req, res) {
    res.send('please select a collection, e.g., /collections/messages')
})

我的解释:当服务器的根被击中时,发送以下消息

示例二(获取):

app.get('/collections/:collectionName/:id', function(req, res) {
    req.collection.findOne({name: req.collection.id(req.params.id)},
        function(e, result){
        if (e) return next(e)
        res.send(result)
    })
})

我的解释:当 url 命中时,从 URL 中获取 id(位于 params.id 中)并基于它进行搜索(即 MongoDB)。

示例三(帖子):

app.post('/collections/:collectionName', function(req, res) {
    req.collection.insert(req.body, {}, function(e, results){
        if (e) return next(e)
        res.send(results)
    })
})

我的解释:当 URL 被命中时,获取位于 req.body 中的有效负载(在本例中为 JSON),并将其作为新文档插入。

问题:

  1. 示例一和二都是 RESTfull 吗?

  2. 我现在完全对 params.id 感到困惑。我明白 POST 是在 rew.body 中传输的……什么是 params.id?它是否包含 URL 变量,例如 :ID?

  3. 我的解释……他们正确吗?

  4. 例子三也是REST,不管用的是POST?

  5. 示例三,'/collections/:collectionName. 为什么在 URL 中传递 ':collectionName',我可以将它作为参数(连同新数据)放在 req.body 中并从那里获取?这样做有什么好处?

谢谢

4

1 回答 1

2
  1. API 必须使用 HATEOAS 才能成为 RESTful。在第一个示例中,如果/是您的 API 的入口点,则响应应该包含可用集合的链接,而不是像这样的人类可读字符串。这绝对不是 RESTful。

  2. 确切地。

  3. 它们没问题,除了第三个示例中没有任何内容暗示它是 JSON 主体。它应该检查Content-Type客户端发送的标头。

  4. REST 不依赖于 HTTP。只要您使用标准化的 HTTP 方法,就可以了。POST 是用于任何非标准化操作的方法,因此如果没有特定的方法,可以将 POST 用于任何事情。例如,使用 POST 进行检索是不正确的,但如果您没有完整的表示,则可以使用它来创建新资源。

  5. POST 表示数据体从属于目标 URI 处的资源。如果collectionName在 POST 正文中,这意味着您正在 POST 到/collections,这对于创建新集合而不是集合的新项目更有意义。

于 2013-11-10T21:48:04.653 回答