RESTful实现和一般信息

时间:2013-11-07 08:28:08

标签: rest restful-architecture

我最近一直在阅读,甚至更多地尝试网络开发。有些事情我简直无法理解,因此感谢任何帮助。

我不是想为我做完作业。我知道一些漏洞,我想填补。请帮助我了解你的观点:)

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)
    })
})

我的解释:当点击中的网址时,从网址(位于params.id中)获取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。为什么':collectionName'在URL中传递,我可以将它作为参数(以及新数据)放在req.body中并从那里获取它?这样做有什么好处?

  6. 谢谢

1 个答案:

答案 0 :(得分: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,这对创建新集合更有意义,而不是集合的新项目。