在Ruby on Rails中使用API/客户端设置进行字段验证

Field Validation with API/client setup in Ruby on Rails

本文关键字:设置 客户端 验证 字段 API on Ruby Rails      更新时间:2023-09-26

我有一个验证问题。我写了一个rails应用程序(API只使用ActiveRecord和Doorkeeper保护),它验证每个请求都很好,如果发生验证错误,它会返回json中的错误。

现在我正在构建使用api的客户端应用程序(也是一个rails应用程序,它没有db或activerecord)。我能够在提交表单后返回验证错误,但是我们希望在提交表单之前在客户端实现javascript验证。包括对某些字段的唯一性检查。

我可能使这个比它应该更难,但是…如何实现这一点?我是否使用ActiveModel(用于简单的验证检查)?我如何做唯一性检查(我只能通过门卫访问API)?我应该为每个字段写一个ajax请求,需要唯一的验证客户端应用程序,这将使api请求验证字段的唯一性?

你认为最好的解决办法是什么?

假设你的意思是你有两个Rails应用程序,一个托管API(连接到数据库),另一个托管前端(没有数据库),我的第一个建议是削减一层复杂性,让你的API服务器也托管你的前端。除非你将其架构为一个庞大的系统,否则额外的复杂性不太可能值得可伸缩性的好处。

无论如何,假设您坚持当前的计划,所有表单数据都流经三个感兴趣的地方:

    [ front-end js ] ---> [ front-end Rails ] ---> [ back-end Rails ]

的每一个位置都可以有自己的验证。但是,由于后端Rails和前端Rails可能会强制执行完全相同的错误集,因此在前端Rails堆栈中添加任何验证基本上是多余的。我建议关注边缘:在前端js中进行所有验证,并在后端Rails堆栈中再次执行它们。您的后端验证错误应该流经前端,以便正确地显示给用户,在极少数情况下,它们会被触发。

对于唯一性检查,我建议——就像你建议的那样——你的API公开一个端点来检查你所关心的字段的唯一性。或者,根据冲突的可能性,依赖后端验证来处理非唯一错误。