restful怎么接收参数(Restful服务中postputpatch的区别)
这几天用express mongoose来实现Restful api,get、post、put和delete都实现了,用postman调试也没问题,这时看到有patch这个方法上网查了一下,了解了post、put与patch之间的区别,这里做下简单的总结,今天小编就来聊一聊关于restful怎么接收参数?接下来我们就一起去研究一下吧!
restful怎么接收参数
这几天用express mongoose来实现Restful api,get、post、put和delete都实现了,用postman调试也没问题,这时看到有patch这个方法。上网查了一下,了解了post、put与patch之间的区别,这里做下简单的总结。
restful中四个基本的方法
POST = 新增
GET = 读取
PUT = 更新
DELETE = 刪除
HTTP的POST/PUT方法,这两个方法似乎都可以用来创建或更新一个资源。
区别是细微但清楚的:
POST方法用来创建一个子资源,如 /api/users,会在users下面创建一个user,如users/1
POST方法不是幂等的,多次执行,将导致多条相同的用户被创建(users/1,users/2 ...而这些用户除了自增长id外有着相同的数据,除非你的系统实现了额外的数据唯一性检查)
而PUT方法用来创建一个URI已知的资源,或对已知资源进行完全替换,比如users/1,
因此PUT方法一般会用来更新一个已知资源,除非在创建前,你完全知道自己要创建的对象的URI。
这里是PUT跟POST,那么PUT与PATCH呢,PUT可以理解为replace(create or update),例如put /user/1的意思是替换/user/1,如果user/1已经存在那么就替换,如果没有那么就创建。PUT必须包含/user/1的所有属性资料。
但是如果只是为了更新/user/1下的一个属性值,那么使用PUT就显得太过笨重,因为需要传入/user/1的所有属性值。这里就可以使用PATCH,用来做局部更新
下面是express实现的restful的代码,代码比较简单,只是表达下POST,PUT,PATCH这些api
POST
router.post('/users', function(req, res, next) {
var name = req.body.userName;
var password = req.body.password;
var resbody = { state: '' };
var md5 = crypto.createHash('md5');
var password = md5.update(password).digest('hex');
var user = new db.User({
name: name,
password: password
});
var check = finduser(db.User, { name: name });
if (check) {
resbody.state = 'fail';
res.send(resbody)
} else {
user.save(function(err, user) {
if (err) {
return console.log(err);
}
resbody.state = 'success';
res.send(resbody)
})
}
next();
})
PUT
//change user's password
router.put('/users/:id', function(req, res, next) {
if (req.body.id) {
var obj = {
name: req.body.name,
password: req.body.password
}
db.User.findByIdAndUpdate(req.body.id, obj).exec();
} else {
var newUser = new db.User({
name: req.body.name,
password: req.body.password
})
newUser.save(function(err) {
if (err) return console.log(err)
})
}
res.send('OK')
})
PATCH
//change user's password
router.put('/users/:id', function(req, res, next) {
var id = req.params.id,
password = req.body.updatepassword;
db.User.findOneAndUpdate({ id: name }, { $set: { password: password } }, function(err) {
if (err) {
console.log(err)
}
res.send('update success');
});
})
最后,放上URI的区别URL
关于URI和URL:
URI—Universal Resource Identifier通用资源标志符
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL—Uniform Resource Location统一资源定位符
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com