我最近一直在阅读,甚至更多地尝试网络开发。有些事情我简直无法理解,因此感谢任何帮助。
我不是想为我做完作业。我知道一些漏洞,我想填补。请帮助我了解你的观点:)
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),并将其作为新文档插入。
问题:
示例一和二都是RESTfull吗?
我现在与params.id完全混淆了。我知道POST是在rew.body中传输的......什么是params.id?它是否包含URL变量,例如:ID?
我的解释......他们是否正确?
示例三也是REST,无论使用POST的事实是什么?
示例三,'/ collections /:collectionName。为什么':collectionName'在URL中传递,我可以将它作为参数(以及新数据)放在req.body中并从那里获取它?这样做有什么好处?
谢谢
答案 0 :(得分:2)
API必须使用HATEOAS才能使用RESTful。在第一个示例中,如果/
是API的入口点,则响应应包含可用集合的链接,而不是类似的人类可读字符串。这绝对不是RESTful。
完全。
他们没关系,除了第三个例子中没有任何暗示它是JSON主体的内容。它应该检查客户端发送的Content-Type
标头。
REST不依赖于HTTP。只要你使用HTTP方法,因为它们是标准化的,它就没问题了。 POST是用于任何非标准化操作的方法,因此如果没有特定于此的方法,可以将POST用于任何操作。例如,使用POST进行检索是不正确的,但如果没有完整的表示,可以使用它来创建新资源。
POST表示数据主体从属于目标URI处的资源。如果collectionName
位于POST正文中,则表示您正在POST /collections
,这对创建新集合更有意义,而不是集合的新项目。