Javascript 对存储在数据库中的会话数据的混淆违反了REST原则
我正在写一篇关于我设计的一个应用程序的报告,其中包括我认为是后端的RESTAPI 应用程序授权用户从数据库请求资源的方式是使用会话cookie。我知道关于会话cookies服务器端是否违反REST有很多争论,但我没有发现任何具体的说明,说明我使用它们的方式违反了REST规则 我将节点Javascript 对存储在数据库中的会话数据的混淆违反了REST原则,javascript,node.js,mongodb,rest,express,Javascript,Node.js,Mongodb,Rest,Express,我正在写一篇关于我设计的一个应用程序的报告,其中包括我认为是后端的RESTAPI 应用程序授权用户从数据库请求资源的方式是使用会话cookie。我知道关于会话cookies服务器端是否违反REST有很多争论,但我没有发现任何具体的说明,说明我使用它们的方式违反了REST规则 我将节点Express框架与Express会话包一起使用。Cookie的创建和存储方式是通过一个中间件,该中间件使用connect mongodb session将会话数据保存到我的mongodb实例,如下所示: app.j
Express
框架与Express会话
包一起使用。Cookie的创建和存储方式是通过一个中间件,该中间件使用connect mongodb session
将会话数据保存到我的mongodb
实例,如下所示:
app.js
//app.js导入开始
const mongoose=需要(“mongoose”);
const session=需要(“快速会话”);
const config=require(“配置”);
const MongoDBStore=require(“连接mongodb会话”)
//app.js导入结束
const mdbStore=新MongoDBStore({
uri:config.get(“mongoURI”),
mongooseConnection:mongoose.connection,
集合:“会话”,
ttl:config.get(“sessionLife”)/1000,
});
//会话中间件
应用程序使用(
会议({
name:config.get(“sessionName”),
genid:函数(){
返回uuid.v4();
},
秘密:config.get(“sessionKey”),
resave:false,
saveUninitialized:false,
曲奇:{
sameSite:没错,
httpOnly:true,
maxAge:config.get(“sessionLife”),
},
门店:MDB门店,
})
);
这意味着当客户端请求传入时,客户端的授权数据将通过req.session
提供,但该数据来自我的数据库,而不是存储在服务器的任何位置
因此,这最终意味着我的服务器不直接存储任何用户数据,而是依赖于存储在数据库中的会话cookie的状态。这是否意味着API不是RESTful的
我通读了这篇SO文章,只发现了数据库中存储的Cookie的一小部分,但仍然非常感谢任何人的评论/澄清/批评。谢谢这是基于前端的性质 如果您使用部署在公共商店中的移动应用程序,任何人都可以下载该应用程序并使用social ID自动注册,那么您的技术就不好 通常,对于企业移动应用程序,会话数据应该加密并在请求-响应中来回发送,并在移动代码中维护 如果这只是一个网页,其余的也可以在部署HTML的同一台服务器上使用,那么会话可以存储在DB中 如果其余部分在另一台计算机中分开,并且您通过内部ip/主机地址从前端服务器端代码调用它(该地址未公开),则您的逻辑不好 前端服务器端代码-意味着您可以拥有一台专门的服务器,负责react js的执行,该服务器不包含数据库访问代码-只提供AJAX服务,显然是REST,可能还有另一台服务器将再次接收另一个REST调用,该调用将与安装了MySQL或Oracle的另一台计算机进行通信 指1台web服务器、1台应用服务器和1台数据库服务器—类似于真实世界的企业应用程序
如果数据库未在同一台计算机中配置,则将会话存储在数据库中不是一个好主意,请在第一台计算机中创建一个缓存数据库服务器,如
redis
或couchbase
,并将会话存储在那里,将业务数据库与您的UI逻辑和需求分开前端是一个React/Redux构建,与create React app
结合在一起,目前与移动设备无关。你能澄清最后一部分吗?你所说的前端服务器端代码是什么意思?是的,这基本上就是配置。react js execution使用axios
与查询云数据库的restapi对话(mongodb
)。你对我所做的有什么结论吗?我仍然不确定您是否在说我的实现不好?是的,如果没有在同一台计算机上配置DB,那么将会话存储在DB中不是一个好主意,在第一台计算机上创建一个缓存DB服务器,如redis或couchbase,并将会话存储在那里,将业务DB与您的UI逻辑和需求分开