- 浏览: 2078905 次
- 性别:
- 来自: NYC
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
创建
先用generator 来创建service 参数为
rails会创建一个service_one_api.rb在/app/apis下,同时有service_one_controller在/app/controllers/下
注意 因为ruby完全动态,所以无法根据方法接口来自动生成webservice, 所以搞了一个xxx_api.rb来干这个事情, 注意 rails对于对象之间的关系不会暴露到webservice外面去,只是简单的把字段id写出去
方法申明
在xxxx_api.rb中负责定义方法的参数, 定义一个web方法如下
它们接收的参数只能是如下情况之一
* symbol或者string 的基本类型
* Class类型只支持ActionWebService::Struct或者ActiveRecord::Base子类
* 一个包含前面2个类型参数的数组
* 一个包含前面3个类型参数的hash 用来表明webservice参数名 (webservice友好)
比如 [[:string]] [Person] [{:lastname=>:string}] [:int,:int]
基本类型为 :int :string :base64(会自动转为binary来传送文件) :bool :float :time :datetime(Ruby的DateTime) :date(Ruby的Date) 除此以为均非法
在Contoller中有如下指令
* wsdl_service_name 'SomeName' 设定当前service的名字(说不是必须的)
* wsdl_namespace 'http://xxx' 设定namespace 默扔为'urn:ActionWebService'
* web_service_api XXXApi 关联controller和他的api类,如果是符合命名规范,可以省略此指令
* web_service_scaffold :somemethod 生成一个action能提供一个直接体验webservice的web界面,方便调试
* web_service_dispatching_mode :layered | :delegated 设置dispatch mode, 省略表示 direct
ActionWebService::Struct 使用
这个类是用来帮助组织webservice可以识别的数据对象(DTO) 通过member方法来定义域和类型, 例子如下
webservice 分派方式
通过web_service_dispatching_mode来申明分派方式, 注意不要写错了,写错了rails不报错,而且能给出无用但是合付xml文法的wsdl(一个没有任何方法的服务)
* 直接分配, 实现写在生成的controller中
layered dispatching 单独实现ActionWebService::Base的子类(放在apis目录下),定义public方法即可
delegated dispatching
申明web_service_dispatching_mode以后,使用web_service :my_serv_name ,XXXXService.new(相对静态生成) 或者web_service :my_name {XXXService.new} 作延迟加载(可以在block中访问controller的变量了,同时也可以对my_name这个新添加的service_action作filter 了)
具体的三种方法我还没有感觉出有什么特别用处,目前对webservice认识还不足
对webservice作 AOP 拦截
支持 before_invocation和after_invocation (:only 和 :except 语法), 如果before_invocation返回false或者抛出异常或者直接return[false,"reason"], 调用都会中止
拦截方法接收两个参数, 一个method_name, 一个method参数数组) 和 其他拦截类似, 还可以传入block(|sourceobj,m_name,m_params|) 和实现拦截类(只要实现interceptor(m_name,m_params)来拦截
webservice的测试
默认已经生成好functional test
使用invoke来调用直接的servcie, 类似还有
invoke_layered(service_name, method_name, *args) invoke_delegated(service_name, method_name, *args)
url对应关系
SOAP
默认controller有一个wsdl的action可以得到wsdl描述文件,通过service.wsdl也一样可以得到(routes.rb创建的),通过这个wsdl就可以得到所有的url信息了
XML-PRC (没有wsdl的情况) (其实在wsdl下方可以看到这些url,一样是对XML-PRC有效的
这里的SERVICE_NAME就是web_service()方法的第一个参数
调用外部webservice
在rails controller内部,通过 web_client_api :product,:soap, 'http://url' 就可以创建一个product方法代理服务,使用product.xxx即可
还可以使用ActionWebService::Client::Soap或者ActionWebService::Client::XmlRpc 来基于Api定义的类直接创建对象 shop
如果服务和rails关联不紧密, 就使用ruby的webservice包,不必用rails的了
先用generator 来创建service 参数为
generator web_service ServiceOne method_a method_b
rails会创建一个service_one_api.rb在/app/apis下,同时有service_one_controller在/app/controllers/下
注意 因为ruby完全动态,所以无法根据方法接口来自动生成webservice, 所以搞了一个xxx_api.rb来干这个事情, 注意 rails对于对象之间的关系不会暴露到webservice外面去,只是简单的把字段id写出去
方法申明
在xxxx_api.rb中负责定义方法的参数, 定义一个web方法如下
api_method :xxxmethod_name, :expects=>... ,:returns => #:expects 如果忽略表示不能传递参数 :returns 忽略表示返回为空
它们接收的参数只能是如下情况之一
* symbol或者string 的基本类型
* Class类型只支持ActionWebService::Struct或者ActiveRecord::Base子类
* 一个包含前面2个类型参数的数组
* 一个包含前面3个类型参数的hash 用来表明webservice参数名 (webservice友好)
比如 [[:string]] [Person] [{:lastname=>:string}] [:int,:int]
基本类型为 :int :string :base64(会自动转为binary来传送文件) :bool :float :time :datetime(Ruby的DateTime) :date(Ruby的Date) 除此以为均非法
在Contoller中有如下指令
* wsdl_service_name 'SomeName' 设定当前service的名字(说不是必须的)
* wsdl_namespace 'http://xxx' 设定namespace 默扔为'urn:ActionWebService'
* web_service_api XXXApi 关联controller和他的api类,如果是符合命名规范,可以省略此指令
* web_service_scaffold :somemethod 生成一个action能提供一个直接体验webservice的web界面,方便调试
* web_service_dispatching_mode :layered | :delegated 设置dispatch mode, 省略表示 direct
ActionWebService::Struct 使用
这个类是用来帮助组织webservice可以识别的数据对象(DTO) 通过member方法来定义域和类型, 例子如下
class Person < ActionWebService::Struct member :id, :int member :name, :string end
webservice 分派方式
通过web_service_dispatching_mode来申明分派方式, 注意不要写错了,写错了rails不报错,而且能给出无用但是合付xml文法的wsdl(一个没有任何方法的服务)
* 直接分配, 实现写在生成的controller中
layered dispatching 单独实现ActionWebService::Base的子类(放在apis目录下),定义public方法即可
class ProductService < ActionWebService::Base web_service_api ProductApi def find_all_products Product.find(:all).map{ |product| product.id end } def find_product_by_id(id) Product.find(id) end end
delegated dispatching
申明web_service_dispatching_mode以后,使用web_service :my_serv_name ,XXXXService.new(相对静态生成) 或者web_service :my_name {XXXService.new} 作延迟加载(可以在block中访问controller的变量了,同时也可以对my_name这个新添加的service_action作filter 了)
具体的三种方法我还没有感觉出有什么特别用处,目前对webservice认识还不足
对webservice作 AOP 拦截
支持 before_invocation和after_invocation (:only 和 :except 语法), 如果before_invocation返回false或者抛出异常或者直接return[false,"reason"], 调用都会中止
拦截方法接收两个参数, 一个method_name, 一个method参数数组) 和 其他拦截类似, 还可以传入block(|sourceobj,m_name,m_params|) 和实现拦截类(只要实现interceptor(m_name,m_params)来拦截
webservice的测试
默认已经生成好functional test
使用invoke来调用直接的servcie, 类似还有
invoke_layered(service_name, method_name, *args) invoke_delegated(service_name, method_name, *args)
url对应关系
SOAP
默认controller有一个wsdl的action可以得到wsdl描述文件,通过service.wsdl也一样可以得到(routes.rb创建的),通过这个wsdl就可以得到所有的url信息了
XML-PRC (没有wsdl的情况) (其实在wsdl下方可以看到这些url,一样是对XML-PRC有效的
layered dispatching http://host/PATH/TO/CONTROLLER/api delegated dispatching http://host/PATH/TO/CONTROLLER/SERVICE_NAME
这里的SERVICE_NAME就是web_service()方法的第一个参数
调用外部webservice
在rails controller内部,通过 web_client_api :product,:soap, 'http://url' 就可以创建一个product方法代理服务,使用product.xxx即可
还可以使用ActionWebService::Client::Soap或者ActionWebService::Client::XmlRpc 来基于Api定义的类直接创建对象 shop
=ActionWebService::Client::Soap.new(ProductApi,"http://my.app.com/backend/api") product = shop.find_product_by_id(5)
如果服务和rails关联不紧密, 就使用ruby的webservice包,不必用rails的了
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 939heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3261reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3302alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1476问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1388这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1354以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1911首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2280这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2270开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1246class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8153TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2031刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1502这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1950面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17228git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2741简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 950第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1700开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12965Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2128又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》:Ruby on Rails是一个全套的MVC web框架,它能帮你开发高质量又美观的web应用,而且开发速度快得出乎你想象。你只须集中精力于应用程序本身,Rails就会帮你...
全书主要内容分为两大...尤为值得一提的是本部分的后几章:作者先后介绍了Web 2.0、Web Service等流行技术在Rails中的支持,然后又凭借丰富的实践经验介绍了Rails在安全性、伸缩性、部署等方面的常见问题和解决方案。
相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。本书涵盖了这些全新的内容,因此能更好地体现出Rails框架的发展现状。 整体而言,全书既有直观的实例,又有深入的分析,同时还涵盖了web...
《Web.Services.on.Rails》是一本专注于在Rails框架下构建Web服务的专著。Rails,作为Ruby编程语言的一个流行Web开发框架,以其简洁、高效和DRY(Don't Repeat Yourself)的原则深受开发者喜爱。Web服务则是一种允许...
### CentOS环境下Rails 3开发环境搭建详解 #### 一、准备工作与环境配置 在开始部署Rails 3开发环境之前,我们需要确保系统上已经安装了一些基本的软件包和工具。这一步骤对于后续的Ruby和Rails安装至关重要。 ##...
- **基于SOAP协议的Web Services时代**:随着Microsoft推出.NET平台,Web Services概念被广泛推广,尽管其间曾遭遇挫折,但在IBM和BEA的推动下,SOA(Service-Oriented Architecture)重新崛起。 - **CORBA与EJB的...
在Rails开发中,常见的模式如Repository模式用于解耦模型和数据访问层,Service Object模式用于封装复杂业务逻辑,以及Presenter模式用于处理视图层的数据展示。理解并灵活运用这些模式,能使代码更加清晰、模块化。...
#### 一、Ruby on Rails简介 Ruby on Rails(简称Rails或RoR)是一种使用Ruby语言编写的开源全栈Web应用框架。它遵循模型-视图-控制器(MVC)架构模式,强调代码优雅性和开发效率,通过约定优于配置的理念简化了...
2. **全栈支持**:作为一款全栈框架,Rails 同时支持前端和后端的开发,这意味着开发者可以在一个框架下完成整个 Web 应用的构建,无需切换不同的工具或技术栈。 3. **高效的开发效率**:Rails 提供了一系列的工具...
Ruby-AssetSync是一个用于Rails应用的Gem,它帮助开发者将前端资源,如CSS、JavaScript、图片等,自动同步到Amazon S3(Simple Storage Service)上。这样做的主要目的是提高Web应用的性能,尤其是在处理静态资产时...
2. **Rails框架**:Rails是一个基于Ruby的Web开发框架,它遵循“约定优于配置”的原则,简化了许多常见的Web开发任务。Rails内置了一系列工具和服务,可以帮助开发者快速搭建RESTful API,从而支持服务导向的设计。 ...
Ruby on Rails,简称RoR,是由David Heinemeier Hansson基于Ruby语言开发的一款开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,使得开发者能够更快速地构建功能丰富的web...
所以ServcieFramework非常强调开发的高效性,其开发效率可以比肩Rails(不相信?可以体验一下哦)。 拥有Java界最简单,非常高效,且真正的富Model层 Controller层含有便利的函数库,简洁高效的验证器,过滤器 简单但...
在本文中,我们将深入探讨如何使用Laravel框架开发与Google AdWords Targeting Idea Service集成的应用。Laravel是一款优雅、强大的PHP框架,它为开发者提供了丰富的工具和结构,以简化Web应用的开发过程。AdWords ...
- **定义**:Ruby on Rails(简称Rails)是一种用于快速开发Web应用程序的开源框架。它采用了Model-View-Controller(MVC)架构模式,简化了数据库操作和网页布局的设计过程。 - **优势**:Rails框架以“约定优于...
NAME DB_USER DB_PASSWORD DB_HOST REDIS_URL NEW_RELIC_APP_NAME NEW_RELIC_LICENSE_KEY SENTRY_DSN SENTRY_SERVICE SENTRY_ENVIRONMENT WEB_CONCURRENCY美洲狮工人的数量每个工作人员MAX_THREADS个线程PORT默认值...
在Linux系统上安装和配置Ruby on Rails是一个常见的任务,特别是在开发Web应用程序时。Ruby on Rails(RoR)是一个基于Ruby语言的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,强调简洁和生产力。在...
GO Rails模板在Ruby On Rails中构建大型Web应用程序的模板。 通过应用以下模式来关注扩展,性能和最佳实践:服务对象,表单对象,查询对象,计算对象,值对象,策略对象,装饰器等。 由与 :red_heart:一般信息Ruby...
在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在构建Web应用时,用户可能需要上传图片、文档等。Rails提供了一种优雅的方式来处理文件上传,包括存储管理、处理和验证。这篇博文“rails 文件上传”可能...
在进行 Ruby on Rails 的开发之前,首先需要完成一系列的基础软件安装工作,包括但不限于 Ruby 语言环境、Rails 框架、版本管理工具等。 ##### 安装基础依赖 1. **更新系统包列表:** ```sh sudo apt-get update...