Ruby on rails Rails API最佳实践,JSON响应
我正在使用一个单独的Rails/Angular前端代码库开发Rails API后端。来自Rails API的响应必须以某种方式进行结构化,以与前端闪存消息相匹配。(n)(稍微简化)控制器响应示例如下:Ruby on rails Rails API最佳实践,JSON响应,ruby-on-rails,json,model-view-controller,Ruby On Rails,Json,Model View Controller,我正在使用一个单独的Rails/Angular前端代码库开发Rails API后端。来自Rails API的响应必须以某种方式进行结构化,以与前端闪存消息相匹配。(n)(稍微简化)控制器响应示例如下: 呈现json:{status:“Unauthorized”,code:“AUTH.Unauthorized”,fallback_msg:“Unauthorized request”} 因此,基本上我所有的控制器都充满了这一点,有时当一个方法有5个可能的响应时(例如:如果用户重置了他们的电子邮件,则
呈现json:{status:“Unauthorized”,code:“AUTH.Unauthorized”,fallback_msg:“Unauthorized request”}
因此,基本上我所有的控制器都充满了这一点,有时当一个方法有5个可能的响应时(例如:如果用户重置了他们的电子邮件,则响应可能是无效密码、无效电子邮件、电子邮件已注册等)。一位同事建议将这些方法抽象到模型中,因此模型是发送回这些消息的响应,然后控制器就可以
def-ctrl\u方法
user=user.update(密码:password)
呈现json:用户,状态(用户)
结束
(其中status是根据对象的status属性提供HTTP状态代码的另一种方法)
我的问题是这是最佳实践吗?我理解Rails MVC,觉得发送json消息的责任属于控制器而不是模型。我说你们都是对的。控制器应该负责发送消息,和方法应该被抽象出来——而不是进入模型,更像是生活在
/lib
中的类
这也会使测试更容易。在不知道更多细节的情况下,我会考虑利用关注点来处理状态。这允许封装业务逻辑,而不会弄乱您的模型。所以你本来可以
module Concerns
module Statuses
def deal_with_show
# business logic goes here to generate the status
end
def deal_with_index
# business logic goes here to generate the status
end
def deal_with_create
# business logic goes here to generate the status
end
def default_status
# set a default status here
end
end
end
然后在控制器中
class MyController < ApplicationController
include Concerns::Statuses
def index
render json: deal_with_index
end
end
class MyController
当然,关注点中状态的细分是任意的。它可以通过方法、动词或其他区别来处理
这是一个很好的例子。如果你想处理ActiveRecord错误,我想你应该使用
错误。完整的消息
并对这些错误使用相同的代码和状态(状态:“禁止”,代码:“”)
请注意,您应该在区域设置文件中自定义消息。但如果你想用不同的语言翻译你的应用程序,它是很有用的
可以从控制器和操作中推断成功消息(见下文)
class ApplicationController
每个控制器方法都有自己的响应,不仅仅是get vs post它的索引vs show vs create等。好的,但这不会改变想法。使用关注点来组织跨控制器复制的逻辑是合适的。我修改了答案,使之更合适。