【问题标题】:Rails API: make application controller serve JSONRails API:使应用程序控制器服务于 JSON
【发布时间】:2015-06-27 19:42:03
【问题描述】:

This tutorialReact + Flux Backed by Rails API,Fancy Pixel 说:

现在我们需要更改应用程序控制器,使其继承 来自 ActionController::API,和protect_from_forgery 说再见。 由于我们只提供 JSON,因此添加

respond_to :json

到应用控制器,帮助彻底干燥。当我们在 它,我们还不如删除 assets 和 views 文件夹,我们不会 需要他们。

我不确定我应该做什么。

这是我的应用程序控制器的样子:

class ApplicationController < ActionController::API
    respond_to :json
end

对吗?

另外,我应该保留还是删除protect_from_forgery with: :null_session

class ApplicationController < ActionController::API
  protect_from_forgery with: :null_session
  respond_to :json
end

【问题讨论】:

  • 当您说服务 JSON 时,您到底想要什么?可以理解为接受或归还
  • 我不确定我能否回答您的问题。本教程的目标是使用 Rails 构建后端,使用 ReactJS 构建前端,并让两者都使用 JSON 进行通信。这样就清楚了吗?
  • 是的 :) 现在回答

标签: json ruby-on-rails-4 controller rails-api


【解决方案1】:

要从任何 Rails 后端(甚至不一定只是一个 API)进行通信,您只需在 API 的控制器中编写以下代码:

class Api::V1::SearchController < ApplicationController
#Run an Authentication Method on their API Key
before_action :authenticate

  def search
    #Performs your backend logic
    content_array = get_content_method
    render :json => content_array
    #Renders up a JSON that you can retrieve with an HTTP get request
  end
end

同样关于提供数据的主题,您可以将参数发送到模糊的 JSON 中,从而隐藏您的 API 密钥,从而保护您免受不必要的访问。我最喜欢的方法是使用.to_query 方法发送必要的参数。我是这样做的:

BASE_URL = "http://yourwebsite.com/search?"

def generate_search_url(params)
    BASE_URL + params.to_query + "&Api-Key=#{ENV['API-KEY']}"
end

通过这种方式,您可以像处理任何其他参数一样使用您提供的数据,但如果没有授予的密钥,滥用 API 会更加困难。

【讨论】:

  • 谢谢,这很有帮助。我肯定会喜欢更多关于从 Rails API 发送 JSON 的细节。
  • 对不起,我实际上在那一行有错字,我可以提供更多关于将其发送到 Rails API 的信息,而不是来自 :P 这应该是在应用程序之间来回发送数据时的基本情况
  • 好的,很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多