【问题标题】:What if I have an API method and a contoller/view method with the same name in RoR?如果我在 RoR 中有同名的 API 方法和控制器/视图方法怎么办?
【发布时间】:2010-04-01 18:00:06
【问题描述】:

假设我希望能够通过转到 /product/list 来查看我网站上的产品列表。伟大的。所以这会使用我的“列表”视图并输出一些我的网络浏览器将呈现的 HTML。

但是现在假设我想向我的客户提供一个 REST API,他们可以在其中获取他们的产品列表。所以我想我会让他们使用 oAuth 进行身份验证,然后他们会调用 /product/list ,这将返回他们产品的 JSON 数组。

但正如我之前所说,/product/list 显示一个 HTML 网页。所以,我有冲突。

在 Rails 中提供 API 的常规做法是什么?我应该在 /app/controller 中有一个子目录“api”和另一个“产品”控制器吗?所以我的客户会去 /api/product/list 获取他们的产品列表?

我对 RoR 有点陌生,所以我还没有最好地掌握 REST 功能,但希望我的问题是有道理的。

【问题讨论】:

    标签: ruby-on-rails api


    【解决方案1】:

    通常的做法是使用 respond_to 方法。您可以使用一个控制器来呈现 HTML 网页、JSON 或 XML 响应。

    class StatesController < ApplicationController
      def index
        @states = State.get_states_by_country(params[:country_id])
    
        respond_to do |format|
            format.html
            format.json { render :json => { :prompt => t('address.select_state'),
                                            :states => @states.to_json(:only => [:id], :methods => [:name]) }}
            format.js
        end
      end
    end
    

    【讨论】:

    • 生病了。只是病了。我正在使用 ExtJS,我发现我可以做到这一点—— Ext.Ajax.defaultHeaders = { 'Accept': 'application/json' }; -- 然后只要我的“responds_to”块中有一个 format.json,Rails 就知道对 '/product/list' 的请求应该返回 JSON 数据——我不必请求 '/product/list. json'。太棒了。
    【解决方案2】:

    使用 respond_do 其实很简单: http://weblog.jamisbuck.org/2006/3/27/web-services-rails-style

    然后他们就可以去 products/list/index.json 并且一切顺利。

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多