Ruby on rails 如何为API版本模型验证?
关于API版本控制的一些想法: 为什么API版本控制是必要的?当我们想要对API端点进行一些破坏性的更改时,比如停止接受某些参数,或者如果我们删除响应的某些部分,这是已经使用我们的API的客户端所期望的,那么这是必需的。在这方面,我们是如何做到这一点的:Ruby on rails 如何为API版本模型验证?,ruby-on-rails,Ruby On Rails,关于API版本控制的一些想法: 为什么API版本控制是必要的?当我们想要对API端点进行一些破坏性的更改时,比如停止接受某些参数,或者如果我们删除响应的某些部分,这是已经使用我们的API的客户端所期望的,那么这是必需的。在这方面,我们是如何做到这一点的: 1.we create a new folder namespace api/v2; 2.we put there the controller, containing the new version of the endpoint api/v
1.we create a new folder namespace api/v2;
2.we put there the controller, containing the new version of the endpoint api/v2/controllers/locations_controller.rb;
3.we implement our controller action;
4.maybe for the response we use a different active model serializer/jBuilder template.
但是,如果我们想更改模型的验证规则,我们该怎么办?让我们假设,我们有一个字段foo,在API的版本1中,它接受三个值a、b和c。因此,在模型中,我们有一个validaiton,如下所示:
validates :foo, inclusion: { in: %w(a b c) }
现在我们要删除其中一个值(a)并添加一个新值(d)。如果我们把模型中的validaiton改为
validates :foo, inclusion: { in: %w(b c d) }
我至少可以想到两个问题:
因此,我想听听您对API版本控制问题的看法,您不仅要更改端点的请求和响应结构和内容,还要更改底层模型。谢谢。您可以使用表单对象模式对Api验证进行版本设置。您可以将验证从模型移动到表单类。有关更多信息,请检查它是否只是一个更改,然后可以添加一个条件,例如如果参数[]b,c,d]。存在,然后跳过验证并通过另一个方法进行检查。但是是的,正确的方法是创建一个v2文件夹,因为代码更易于阅读和维护。如果这种情况仅适用于一种型号,那么我建议使用
attr\u访问器
如“v1\u验证”和v2\u验证
,在控制器操作中,我使用的是您正在获取api的版本。为该验证添加true
值,并在模型中为该验证添加条件。我希望你能理解我想说的话谢谢你的回复。这是所有模型的常见情况,因为更改可以出现在任何表中,并且关联的模型将被更改。您可以使用表单对象模式来版本Api验证。您可以将验证从模型移动到表单类。有关更多信息,请检查它是否只是一个更改,然后可以添加一个条件,例如如果参数[]b,c,d]。存在,然后跳过验证并通过另一个方法进行检查。但是是的,正确的方法是创建一个v2文件夹,因为代码更易于阅读和维护。如果这种情况仅适用于一种型号,那么我建议使用attr\u访问器
如“v1\u验证”和v2\u验证
,在控制器操作中,我使用的是您正在获取api的版本。为该验证添加true
值,并在模型中为该验证添加条件。我希望你能理解我想说的话谢谢你的回复。这是所有模型的常见情况,因为更改可以出现在任何表中,并且关联的模型将被更改。