我应该将用户数据 sanitization/validation 实现为中间件吗?
Should I implement user data sanitization/validation as middleware?
我正在用 Slim 重新实现我的用户管理系统,我正在尝试弄清楚我应该在哪里处理用户数据sanitization/validation。我一直在阅读有关中间件的信息,我想知道这是否是实现数据验证的合适方法。
我的验证计划是对每个包含一些用户数据(即表单)的请求使用验证模式(一个简单的 JSON 文件)。但是,不同的表单显然会使用不同的schema,并且可能存在某些类型的验证无法单独由schema处理。
因此,我实现的任何中间件都必须根据路由决定使用哪个模式。此外,某些路由将需要超出模式中表示的其他验证逻辑。这对我来说听起来像是错误的方法 - 中间件不应该是公平的 "generic",在每个 request/response 上执行相同的逻辑吗?
另一种方法是在每个路由中使用适当的模式初始化某种验证对象,然后将我的 Slim 应用程序注入其中。
哪种方法更明智?
使用全局中间件没有意义,因为您最终会将每个端点的参数列表耦合在一起。
我会考虑的两个选项是:
作为路由中间件实现,这样你就可以为每个端点设置不同的filtering/validation。
例如
function fooFilter() {
// filter/validate GET variables here and set back into request.
}
$app->get('/foo', 'fooFilter', function () {
// "controller" logic
});
这样做的好处是您的控制器逻辑不需要被验证内容弄得乱七八糟,因为这已经完成了。
Filter/validate 在控制器逻辑中。此处的主要优点是您可以更轻松地审核是否正在使用 GET 变量而无需先 filtered/validated。
我正在用 Slim 重新实现我的用户管理系统,我正在尝试弄清楚我应该在哪里处理用户数据sanitization/validation。我一直在阅读有关中间件的信息,我想知道这是否是实现数据验证的合适方法。
我的验证计划是对每个包含一些用户数据(即表单)的请求使用验证模式(一个简单的 JSON 文件)。但是,不同的表单显然会使用不同的schema,并且可能存在某些类型的验证无法单独由schema处理。
因此,我实现的任何中间件都必须根据路由决定使用哪个模式。此外,某些路由将需要超出模式中表示的其他验证逻辑。这对我来说听起来像是错误的方法 - 中间件不应该是公平的 "generic",在每个 request/response 上执行相同的逻辑吗?
另一种方法是在每个路由中使用适当的模式初始化某种验证对象,然后将我的 Slim 应用程序注入其中。
哪种方法更明智?
使用全局中间件没有意义,因为您最终会将每个端点的参数列表耦合在一起。
我会考虑的两个选项是:
作为路由中间件实现,这样你就可以为每个端点设置不同的filtering/validation。
例如
function fooFilter() { // filter/validate GET variables here and set back into request. } $app->get('/foo', 'fooFilter', function () { // "controller" logic });
这样做的好处是您的控制器逻辑不需要被验证内容弄得乱七八糟,因为这已经完成了。
Filter/validate 在控制器逻辑中。此处的主要优点是您可以更轻松地审核是否正在使用 GET 变量而无需先 filtered/validated。