在 Rails 的 Ruby 中使用 API/client 设置的字段验证

Field Validation with API/client setup in Ruby on Rails

我遇到了验证问题。我写了一个 rails 应用程序(API 仅使用 ActiveRecord 和 Doorkeeper 进行保护)它验证每个请求都很好,它 return 是 json 中的错误如果验证发生错误。

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

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

您认为最好的解决方案是什么?

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

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

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

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

对于唯一性检查,我建议——正如您所建议的那样——您的 API 公开一个端点来检查您关注的字段的唯一性。或者,根据发生碰撞的可能性,依靠后端验证来处理非唯一错误。