使用Ruby on Rails Web应用程序连接Java Desktop应用程序

时间:2013-02-26 17:05:25

标签: java ruby-on-rails ruby database web

我正在尝试使用PostgreSQL数据库和使用Hibernate的H2数据库引擎的Java应用程序构建Ruby on Rails Web应用程序。

我听说过JDBC,RMI和套接字,但我对其中任何一个都不了解。

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

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

如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分: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中定义)/:username

例如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(和任何其他语言)

答案 1 :(得分:0)

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

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

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

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

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

class StudentsController < ApplicationController
  respond_to :html, :json

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

这将设置一个名为Responder的ActionController功能。现在,当向/students/1.json发出请求时,控制器将在Student模型上调用as_json,该模型默认采用所有模型属性并将其转换为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,则可以在所有这些示例中用json替换xml