如何使用 Rails 通过 Web 服务以 JSON 格式公开数据?

Posted

技术标签:

【中文标题】如何使用 Rails 通过 Web 服务以 JSON 格式公开数据?【英文标题】:How do I expose data in a JSON format through a web service using Rails? 【发布时间】:2010-09-08 15:08:19 【问题描述】:

有没有一种简单的方法可以使用 Rails 以 JSON 格式将数据返回给 Web 服务客户端?

【问题讨论】:

【参考方案1】:

Rails 资源为您的模型提供了 RESTful 接口。让我们看看。

型号

class Contact < ActiveRecord::Base
  ...
end

路线

map.resources :contacts

控制器

class ContactsController < ApplicationController
  ...
  def show
    @contact = Contact.find(params[:id]

    respond_to do |format|
      format.html 
      format.xml render :xml => @contact
      format.js  render :json => @contact.json
    end
  end
  ...
end

因此,这为您提供了一个 API 接口,而无需定义特殊方法来获取所需的响应类型

例如。

/contacts/1 # Responds with regular html page

/contacts/1.xml # Responds with xml output of Contact.find(1) and its attributes

/contacts/1.js # Responds with json output of Contact.find(1) and its attributes

【讨论】:

很好的答案!如果我可以将它更新到 Rails 3,json 方法现在似乎是 to_json。至少这对我有用......即@contact.to_json【参考方案2】:

http://wiki.rubyonrails.org/rails/pages/HowtoGenerateJSON

【讨论】:

【参考方案3】:

Rails monkeypatches 大多数你关心的东西都有一个#to_json 方法。

在我的脑海中,您可以对哈希、数组和 ActiveRecord 对象执行此操作,它们应该涵盖您可能需要的大约 95% 的用例。如果您有自己的自定义对象,为它们编写自己的 to_json 方法很简单,它可以将数据塞入哈希中,然后返回 jsonized 哈希。

【讨论】:

猴子补丁?我不知道这意味着什么,但我猜它指的是向大多数(如果不是全部)对象提供该方法 它正在修补现有对象,添加方法或更改它(如果存在)。它实际上只是动态语言扩展。【参考方案4】:

有一个插件可以做到这一点, http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/

据我了解,Rails 中已有此功能。但是去看看那篇博文,里面有代码示例和解释。

【讨论】:

【参考方案5】:

ActiveRecord 还提供了与 JSON 交互的方法。要从 AR 对象创建 JSON,只需调用 object.to_json。要从 JSON 中创建 AR 对象,您应该能够创建一个新的 AR 对象,然后调用 object.from_json .. 据我所知,但这对我不起作用。

【讨论】:

以上是关于如何使用 Rails 通过 Web 服务以 JSON 格式公开数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Rails 通过 Web Sockets 发送二进制文件

ruby rails中如何配置puma服务监听指定的IP地址

为啥 websocket-rails 需要作为独立服务器启动以支持基于非事件机的 Web 服务器?

如何在2个服务器之间进行通用认证--Rails和Django

如何通过Rails控制台在Digital Ocean上写入权限来执行Ruby脚本?

如何在我的 Rails RESTful Web 服务中接受 PUT 和 DELETE 方法