2

我正在尝试使用 PostgreSQL 数据库构建一个 Ruby on Rails Web 应用程序,以及一个使用 Hibernate 的带有 H2 数据库引擎的 Java 应用程序。

我听说过 JDBC、RMI 和 Sockets,但我对这些一无所知。

问题是,我想使用来自 Web 应用程序的数据,使用本地数据库对其进行一些处理,最后我想将更改上传到数据库,或者假设我想在 Web 数据库中创建新表并立即显示网络中的变化。

例如,我想让学生在网络上注册,将学生从网络数据库中滚动到本地数据库并输入分数,最后我希望能够在网络数据库中添加标记,并且在网络中单个标记应该立即发布。

如果有人可以帮助我,我将不胜感激。

4

2 回答 2

2

您的问题的解决方案是(REST)API。

我建议在 api/v[number_of_version]/ 下为您的 API 创建单独的控制器

Ryan Bates 在http://railscasts.org上有一个非常好的示例,介绍了如何在此处构建 REST API。

您可以在此处找到 API 的代码示例。

https://github.com/railscasts/350-rest-api-versioning/tree/master/store-after/app/controllers/api

然后您可以使用 HTTP 请求获取数据。

例如。要在您的应用程序中为用户获取数据,您将在 url 中执行 http 请求(您将在 api 和 version 命名空间下的 routes.rb 中定义)/:用户名

例如http://yourdomain.com/ausername

你会得到一个 JSON 响应,比如

user: {
  username: "ausername"
  email: "ausername@amaildomain.com"
 .....

如果您有任何问题,请随时问我:)

问题更新

当然,您可以通过这种方式添加数据。您只需要将正确的 json 导出到正确的 url。

我在这个应用程序中做了一个例子

https://github.com/Geembo/getshitdone

这个例子:

https://github.com/Geembo/getshitdone/blob/master/app/controllers/tasks_controller.rb

在这个应用程序中,我通过 Javascript (Backbone) 保存任务。相同的规则适用于 Java(和任何其他语言)

于 2013-02-26T18:14:56.643 回答
0

处理这个问题的最好方法是从 Web 应用程序中提供一个 API,外部应用程序可以与之交互。Rails 的一大优点是它基本上支持开箱即用。

采取典型的控制器操作从网络查看学生。

class StudentsController < ApplicationController
  def show
    @student = Student.find(params[:id])
  end
end

发出请求/students/1后,students/show将为 ID#1 的学生呈现模板。

Rails 能够将 xml/json 附加到 URL 的末尾,以便使用不同的格式类型请求处理。

class StudentsController < ApplicationController
  respond_to :html, :json

  def show
    @student = Student.find(params[:id])
    respond_with(@student)
  end
end

这设置了 ActionController 的一个功能,称为 Responder。现在,当向控制器发出请求时,/students/1.json将调用as_jsonStudent 模型,该模型默认获取所有模型属性并将其转换为 json 对象。这可以通过覆盖学生模型中的 as_json 来定制。

要进行更新,您可以遵循类似的模式。您使用 PUT 请求向服务器提交/students/1.json. 请求不是 JSON 格式,您使用的库可能支持设置变量,请确保它采用 Rails 期望的格式(即student[field])。Rails 中间件将负责其余的工作。

class StudentsController < ApplicationController
  respond_to :html, :json

  def update
    @student = Student.find(params[:id])
    @student.update_attributes(params[:student])
    respond_with(@student)
  end
end

请注意,使用 Responders 不会检查 update_attributes 是否有效,它respond_with会为您执行此操作。如果有错误,您将获得 HTTP 422 Unprocessable Entity 作为响应代码,并且响应的主体将是带有错误的 JSON 对象。

还值得一提的是,如果您更喜欢 XML 响应正文而不是 JSON,则可以在所有这些示例中替换为jsonxml

于 2013-02-26T17:34:33.190 回答