我应该验证 API 或 BL 层中的输入吗?

Should I validate input in API or BL layer?

我有一个带有 API、BL 和 DAL 层的 node.js 应用程序,我想验证用户输入。

目前我正在 BL 函数的开头进行验证,因此它兼作用户输入验证器和内部应用程序验证器(来自其他 类 的调用)

我担心这不是好的做法,因为验证可能会在对某些函数的单个 API 调用中发生多次(例如,接受 userId 然后将 userId 发送到其他函数的函数,验证多次相同的值)

您应该使用中间件验证来自对路由的请求的数据:

router
  .get('/', validators.users.index, actions.users.index)

如果您愿意,我可以与 Joi 分享其余的验证代码。