有没有办法在 Ruby on Rails 中发布 RESTful 方法所期望的参数?使用 SOAP,我们可以使用 WSDL,但是 RoR 是否为 RESTful 服务实现了 WADL 或 WSDL 2.0?编辑:我知道使用 ActionWebService 的基于 SOAP 的解决方案。我指的是与https://wadl.dev.java.net/等效的 RoR
4 回答
是的,您的要求的解决方案是在 rails 中安装Actionwebservice gem ,如果您使用 rails 2.3.2 并尝试使用以下命令安装 Actionwebservice gem
第1步 :
$ gem install datanoise-actionwebservice --source http://gems.github.com
第 2 步:将 gem 添加到 conf/environment.rb
config.gem 'datanoise-actionwebservice', :lib => 'actionwebservice'
第 3 步:生成网络服务
$ ./script/generate web_service webservice_name
你可以在 /app/services 中看到生成的 webservice 文件
第四步:修改你的控制器
class YourController < ApplicationController
wsdl_service_name 'webservice_name'
web_service_api webservice_nameApi
web_service_scaffold :invocation if Rails.env == 'development'
def add(name, value)
Your.create(:name => name, :value => value).id
end
end
第 5 步:在 app/services 中修改您的 api 类
class WebserviceNameApi < ActionWebService::API::Base
api_method :add, :expects => [:string, :string], :returns => [:int]
end
第 6 步: 您可以读取 wsdl 文件
$ ./script/server
$ curl http://localhost:3000/controller/wsdl
答案是不”; Rails 没有提供这样做的方法。可以说,没有人使用 WSDL 2.0,更不用说任何做 REST 的人了(尽管理论上它在一定程度上是可能的,但它对 RESTful HTTP 的支持非常有限;例如,它不支持超媒体)。WADL 在 REST 社区中也存在严重的接受问题;除了 Java Jersey 框架外,我不知道有任何实现。
您可以使用REST Describe & Compile基于您的 WADL 生成 Ruby 客户端。您可以在 Google 文档中找到关于它的非常详细的文档。
实际上有一个实现 - 一个可以从 Rails 路由生成 WADL 的 gem:https ://github.com/austvik/wadlgen ,但它有它的局限性。