当前位置: 首页 > 后端技术 > Node.js

RestfulRepresentationalStateTransfer

时间:2023-04-03 20:45:49 Node.js

RestfulRESTRepresentationalStateTransferREST通常基于HTTP、URL、XML、HTML的使用。REST使用的数据格式是JSONHTTP方法GET获取数据PUT更新添加数据DELETE删除数据POST添加数据RESTful是一种基于httpResource的架构方法,URLREStful都被称为representationalstatetransfer。任何需要引用的东西都是资源。资源可以是实体或抽象概念。资源示例用户的手机号码用户的个人信息用户手机的潜在价值应该被识别和唯一标识。URL可以看成是资源的地址,也可以看成是资源的名称。以github为例。仓库地址为https://github.com/mySoul8012...个人信息地址为https://github.com/mySoul8012。查看URL,我们可以看到仓库在该用户名下。一些设计技巧用-或_来进行资源切分用/来表示所用资源的层级关系?过滤资源/pulls?state=closed表示关闭的推送请求,URL对应具体的查询结果。.Or:表示同级统一资源关系的资源接口。幂等性意味着当资源被请求一次或多次时,它应该具有相同的副作用。属于语义的词。HTTP协议是一种面向资源的应用层协议。GET用于获取资源。它不应该有副作用,所以称为幂等性。例如,当一个资源被请求时,它的状态不会改变。这意味着GET是幂等的,HTTPDELETE将删除资源。这时候它是有副作用的,但是多次的副作用是一样的,或者说它有它的幂等性。POST创建资源,每次的副作用都不一样。没有幂等性。PUT用于更新资源。对于同一个URL一次和多次都是一样的。这时候GET是安全和幂等的。等。使用服务器管理的实例号生成资源,创建子资源,并使用它们来部分更新资源。如果没有修改,资源将不会被更新(乐观锁的一种表现)。PUTPUT不安全且幂等。使用客户端管理的实例创建资源并通过替换更新资源。DELETE是不安全的,但是四种幂等方式总结了四种tcp方式,都是不安全的,因为都是明文传输,需要https完成加密,防止被抓到一些问题。一种框架rails官网https://rubyonrails.org/或RubyonRails,一种基于Ruby的面向对象、命令式、函数式、动态的通用编程语言,由日本科学家发明。它的特点是函数式编程,是一个开源的web应用框架,严格按照MVC架构开发。使用GithubTwitterbasecampGrouponyellowpagesPOST和PUT给博客添加一个Java分类,生成的路径名为/categories/java使用PUT方式完成更新,因为此时是由客户端决定的。客户端不一定支持HTTP方法。rails框架是通过隐藏参数的方法实现真实请求传递的方式。资源的表示。客户端得到的只是资源的表示。即资源的外在表现。资源的表示由数据和描述数据的元数据组成。通过HTTP内容的协商,客户端通过头信息来实现。以github为例,JSON表示如下。一些常见的表示形式的URL都带有版本号URL作为后缀,以区分表示形式。不支持表示格式的资源的超链接是状态引擎。将连接引导程序客户端添加到演示格式。即这种链接称为循环。以github为例,状态传递应用状态和资源状态要区分应用状态和资源状态。客户端维护应用程序状态。服务器维护资源状态。客户端和服务器交互必须是无状态的。cookie是保存一些服务器可以依赖的信息,而不依赖于会话状态。应用程序状态的传输会话状态不作为资源状态保存在服务器端,而是作为应用程序状态被客户端跟踪。客户端应用程序在服务器端指导超链接的指导下发生变化。为架构模式创建RESTfulJSON数据资源文件{"user1":{"name":"mahesh","password":"password","profession":"teacher","id":1},"user2":{"name":"suresh","password":"password2","profession":"libraian","id":2},"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3},}即根据json文件,有如下api序号urlHttp方法发送内容结果1listUsersGET空显示所有用户列表2addUserPOSTJSONstring添加新用户3deleteUsersDELETEJSON字符串删除用户4idGET空显示用户详情获取用户列表http://127.0.0.1:1937/listUsers/*server.js*/varexpress=require('express');//引入express框架varapp=express();varfs=require('fs');//导入文件模块//创建获取请求app.get('/listUsers',(req,res)=>{fs.readFile(__dirname+'/'+'users.json','utf8',(err,data)=>{//读取文件console.log(data);res.end(data);//将读取的内容返回给客户端});});//启动服务器varserver=app.listen(1937,()=>{控制台.log(server.address());})看看json数据,暂时完成一部分添加用户。JSON.parse有个小坑,最后不允许使用。/*server.js*/varexpress=require('express');//导入express框架varapp=express();varfs=require('fs');//导入文件模块//添加用户数据varuser={"user4":{"name":"mohit","password":"password4","profession":"teacher","id":4}}//创建获取请求app.get('/addUser',(req,res)=>{//读取现有数据fs.readFile(__dirname+"/"+"users.json","utf8",(err,data)=>{if(err){returnconsole.log(err);};data=JSON.parse(data);//将传入的JSON转换为对象格式data["user4"]=user["user4"];console.log(data);res.end(JSON.stringify(data));//将对象转换成JSON格式});});//启动servervarserver=app.listen(1937,()=>{console.log(server.address());}){"user1":{"name":"mahesh","password":"password","profession":"teacher","id":1},“用户2”:{"name":"suresh","password":"password2","profession":"libraian","id":2},"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}访问http://127.0.0.1:1937/addUser返回的json数据,此时本地的json数据还是没有变化。如果要改,需要fs写入模块将JSON数据写入JSON文件,显示用户详情/*server.js*/varexpress=require('express');//引入express框架varapp=express();varfs=require('fs');//导入文件模块//添加用户数据varuser={"user4":{"name":"mohit","password":"password4","profession":"teacher","id":4}}//创建获取用户列表的路由app.get('/listUsers',function(req,res){fs.readFile(__dirname+"/"+"users.json",'utf8',function(err,data){console.log(data);res.end(data);});})//创建添加用户路由请求app.get('/addUser',(req,res)=>{//读取已有数据fs.readFile(__dirname+"/"+"users.json","utf8",(err,data)=>{if(err){返回rn控制台日志(错误);};数据=JSON.parse(数据);//将传入的JSON转换为对象格式data["user4"]=user["user4"];控制台日志(数据);res.end(JSON.stringify(数据));//将对象转为JSON格式});});//添加路由显示用户详情app.get('/:id',(req,res)=>{//首先读取已有用户fs.readFile(__dirname+'/'+"users.json",'utf8',(err,data)=>{data=JSON.parse(data);varuser=data["user"+req.params.id]//获取get得到的值console.log(user);res.end(JSON.stringify(user));})})//启动servervarserver=app.listen(1937,()=>{console.log(server.address());})查看浏览器删除用户获取的json数据/*server.js*/varexpress=require('express');//导入express框架varapp=express();varfs=require('fs');//导入文件模块//创建获取用户列表的路由app.get('/listUsers',(req,res)=>{fs.readFile(__dirname+"/"+"users.json",'utf8',(err,data)=>{console.log(data);res.end(data);});})//创建添加用户路由请求app.get('/addUser',(req,res)=>{//读取现有数据fs.readFile(__dirname+"/"+"users.json","utf8",(err,data)=>{if(err){returnconsole.log(err);};//添加用户varuser={"user4":{"name":"mohit","password":"password4","profession":"teacher","id":4}}data=JSON.parse(data);//将传入的JSON转换为对象格式data["user4"]=user["user4"];console.log(data);res.end(JSON.stringify(data));//将对象转为JSON格式});});//添加路由显示用户详情app.get('/:id',(req,res)=>{//首先读取现有用户fs.readFile(__dirname+'/'+"users.json",'utf8',(err,data)=>{data=JSON.parse(data);varuser=data["user"+req.params.id]//获取值console.log(user);res.end(JSON.stringify(user));})})varapp=express();//不知道这里为什么要重新定义?//删除用户app.get('/deleteUser',(req,res)=>{//先获取用户信息fs.readFile(__dirname+"/"+"users.json",'utf8',(err,data)=>{data=JSON.parse(data);deletedata["user"+2];console.log(data);res.end(JSON.stringify(data));});})//启动服务器varserver=app.listen(1937,()=>{console.log(server.address());})不清楚为什么要重新定义一个类