在 Rails 中合并 API 和网络视图 5
Combining API and web views in Rails 5
截至Rails5日,APIgem已合并。
现在,如果我有 API 从网页上通过 AJAX 调用,那我们还有什么可做的?我在这里寻找最佳实践。当然,我可以自己使用 JSON 序列化程序创建路由。然后,就有可能将 API 调用完全分离到另一个应用程序中。
因为 API 功能是通过继承调用的 class ApplicationController < ActionController::API
我真的看不到将它与标准 ApplicationController < ActionController
调用结合起来的选项。
我说的对吗?基于每个控制器的重载是否可行?
如果您使用 --api
模式,我认为您是对的 - 您无法将它们结合起来。这是设计使然 - ActionController::API
是 ActionController::Metal
的子 class。这个想法是 ActionController::API
非常瘦和轻。但是,通过启用 api 模式 ,您创建了一个 "contract",您的应用程序将只是一个 API,仅此而已。
但是,如果您使用的是普通 Rails,您总是可以在同一个应用程序中同时拥有一个普通控制器和一个 API 控制器应用程序。然后,ActionController::API
class 也将可用,因此您可以拥有一个 API
名称空间,仅包含轻量级 API
控制器,其余部分位于全局名称空间中。
例如:
class UsersController < ApplicationController
* some code here *
end
和:
class API::V1::UsersController < ApplicationController::API
* some code here *
end
希望对您有所帮助!
截至Rails5日,APIgem已合并。
现在,如果我有 API 从网页上通过 AJAX 调用,那我们还有什么可做的?我在这里寻找最佳实践。当然,我可以自己使用 JSON 序列化程序创建路由。然后,就有可能将 API 调用完全分离到另一个应用程序中。
因为 API 功能是通过继承调用的 class ApplicationController < ActionController::API
我真的看不到将它与标准 ApplicationController < ActionController
调用结合起来的选项。
我说的对吗?基于每个控制器的重载是否可行?
如果您使用 --api
模式,我认为您是对的 - 您无法将它们结合起来。这是设计使然 - ActionController::API
是 ActionController::Metal
的子 class。这个想法是 ActionController::API
非常瘦和轻。但是,通过启用 api 模式 ,您创建了一个 "contract",您的应用程序将只是一个 API,仅此而已。
但是,如果您使用的是普通 Rails,您总是可以在同一个应用程序中同时拥有一个普通控制器和一个 API 控制器应用程序。然后,ActionController::API
class 也将可用,因此您可以拥有一个 API
名称空间,仅包含轻量级 API
控制器,其余部分位于全局名称空间中。
例如:
class UsersController < ApplicationController
* some code here *
end
和:
class API::V1::UsersController < ApplicationController::API
* some code here *
end
希望对您有所帮助!