在Rails Web应用程序中,控制器中的某些操作通常会返回JSON,而不是HTML视图。
如果您使用许多需要JSON响应的Javascript组件,这种情况尤为常见。
前几天我正在编写这样的动作,并想知道是否应该将我的所有JSON响应移动到API控制器命名空间。这是 not 为未来的完全前端应用程序提供API,而只是将JSON响应分离到它们自己的命名空间。
这是良好做法还是过度工程?
答案 0 :(得分:2)
根据我的经验,将UI和API控制器分开是一种很好的做法,原因如下:
给定模型所需的UI和API操作绝不是一对一的。让控制器感到困惑,其中某些操作会响应UI和API请求而其他操作只响应其中一个。
UI和API响应需要来自控制器的不同支持:不同的包含模块,不同的辅助方法,不同的过滤器等。为给定的模型提供两个不同的控制器要简单得多,一个只有支持UI响应所需的功能,另一个只有支持API响应所需的功能。
事实上,使用单个控制器同时提供UI和API响应是重复数据删除(路由和操作)如何使代码变得更糟的一个很好的例子。
答案 1 :(得分:2)
如果你只是期待JSON
回复,我会留给你拥有的控制器,并使用responders
gem:
#app/controllers/your_controller.rb
class YourController < ApplicationController
respond_to :html, :json
def show
@x = Y.find params[:id]
respond_with @x
end
end
控制器旨在处理RESTful基础架构。这意味着它们应该用于操纵/调用对象到视图中。不要与Models
的角色混淆,控制器应根据操作组合/更改对象。
如果您试图通过JS提取完全不同的数据,那么创建一个API来处理它可能是值得的。但是,如果你能在“前端”控制器中进行一些简单的改编,你应该克制。