- 浏览: 2078989 次
- 性别:
- 来自: 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 951第一个版本 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的错误。 上次出错忘了,记录下 ...
相关推荐
风光储微网并网仿真模型的构建与实践:永磁风机、光伏阵列与储能系统的协同控制策略及并网性能研究,风光储微网并网仿真模型 包含永磁风机发电机、光伏阵列、储能系统及其各自控制系统。 永磁直驱风机:机侧变流器采用转速外环电流内环的双闭环控制策略,爬山搜索法实现最大功率点跟踪控制。 光伏阵列后接boost升压至直流母线400V 采用扰动观察法实现mppt功能 储能电池采用buck-boost双向DCDC变器 控制策略采用电压外环电流内环双闭环控制 稳定直流母线电压400V恒定,电压纹波<1% 逆变并网采用单极调制,开关损耗大幅降低 逆变器采用电网电压前馈、电流环、锁相环控制,对于电网中含有的三次谐波有明显的抗干扰效果。 并网电流THD低至1.36%,满足并网要求 附带参考资料、建模过程参考文件夹(万字以上),含参数计算,亦有本人笔记 ,风光储微网并网仿真模型; 永磁风机发电机; 光伏阵列; 储能系统; 控制系统; 最大功率点跟踪控制; 双闭环控制策略; 直流母线电压稳定; 逆变并网; 抗干扰效果; 并网电流THD。,基于风光储微网的并网仿真模型:含永磁风机、光伏阵列及储能系统的双闭环控制策略研究
Simpack CRH2型高铁车辆模型:全轨道谱激励下的精细化模拟分析,simpack CRH2型高铁车辆模型,带全部轨道谱激励。 ,simpack; CRH2型高铁车辆模型; 轨道谱激励,"Simpack CRH2型高铁车辆模型:全轨道谱激励集成版"
c语言学生信息系统.zip
mongoose web
COMSOL辐射制冷模型:探索混凝土表面在晴朗天空下的温度分布与辐射冷却特性(不含对流),comsol辐射制冷模型 在晴朗的天空中,大气对于 8 到 13 μm(大气窗)范围内的波长几乎是透明的,因此即使在晴天,也有可能冷却表面。 该模型比较了混凝土块的上表面为黑色表面且具有辐射冷却属性时,该表面接触环境和太阳辐射的温度分布, 其中不包含对流冷却。 该模型将“固体传热”接口与“表面对表面辐射”接口相耦合,其中采用 4 个光谱带对辐射、表面发射率和天空辐射率的波长相关性进行建模。 ,关键词:comsol;辐射制冷模型;大气窗;波长;混凝土块;温度分布;辐射冷却属性;对流冷却;固体传热;表面对表面辐射;光谱带;辐射相关性。,基于comsol的辐射制冷模型:透明大气下混凝土块辐射传热分析
c语言商品销售系统源码.zip
二阶系统模糊PID控制策略仿真效果展示:动态响应与优化调整,二阶系统模糊PID控制 仿真效果如图所示 ,二阶系统; 模糊PID控制; 仿真效果,"二阶系统模糊PID控制:仿真效果图解展示"
com.iqiyi.i18n(1).apk
数据来源:主要来源于中国统计年鉴、城市统计年鉴、各地区统计年鉴、农业、工业行业、纺织行业、房地产业、能源行业、石油和化学行业、运输和储存业等重点行业数据采集与整理 数据范围:全国各地机场、航线、航司飞常准航班统计数据 数据期间:(详见文件名标识的年度区间) 主要指标: 各国往返内地航班的(总计划或总执行或总取消航班量 或总取消率,具体要看文件名标识): 韩国(KR) 日本(JP) 泰国(TH) 新加坡(SG) 越南(VN) 马来西亚(MY) 澳大利亚(AU) 俄罗斯(RU) 菲律宾(PH) 印尼(ID) 柬埔寨(KH) 阿联酋(AE) 英国(GB) 德国(DE) 美国(US) 意大利(IT) 新西兰(NZ) 法国(FR) 土耳其(TR) 哈萨克斯坦(KZ) 老挝(LA) 荷兰(NL) 缅甸(MM) 卡塔尔(QA) 尼泊尔(NP) 巴基斯坦(PK) 蒙古(MN) 孟加拉(BD) 埃塞俄比亚(ET) 埃及(EG) 西班牙(ES) 伊朗(IR) 比利时(BE) 沙特阿拉伯(SA) 马尔代夫(MV) 肯尼亚(KE) 土库曼斯坦(TM) 乌兹别克斯坦(UZ) 斯里兰卡(LK) 以色列(IL) 波兰(PL) 瑞士(CH) 葡萄牙(PT) 瑞典(SE) 芬兰(FI) 吉尔吉斯斯坦(KG) 文莱(BN) 匈牙利(HU) 坦桑尼亚联合共和国(TZ) 加拿大(CA) 阿尔及利亚(DZ) 奥地利(AT) 丹麦(DK) 塞尔维亚共和国(RS) 乌克兰(UA) 乌干达(UG) 也门共和国(YE) 伊拉克(IQ) 保加利亚(BG) 克罗地亚(HR) 关岛(GU) 冰岛(IS) 几内亚(GN) 刚果(CG) 刚果民主共和国(CD) 加蓬(GA) 北马里亚纳群岛(MP) 南苏丹(SS) 南非(ZA) 博茨瓦纳(BW) 卢旺达(RW) 卢森堡(LU) 印度(IN) 叙利亚(SY) 古巴(CU) 吉布提(DJ) 哥伦比亚(CO) 哥斯达黎加(CR) 喀麦隆(CM) 塔吉克斯坦(TJ) 塞拉利昂(SL) 墨西哥(MX) 尼日利亚(NG) 尼日尔(NE) 巴布亚新几内亚(PG) 巴拿马(PA) 巴西(BR) 希腊(GR) 拉脱维亚(LV) 挪威(NO) 捷克共和国(CZ) 摩洛哥(MA) 斯洛伐克(SK) 朝鲜(KP) 格鲁吉亚(GE) 毛里塔尼亚(MR) 毛里求斯(MU) 津巴布韦(ZW) 爱尔兰(IE) 瓦努阿图(VU) 留尼汪(RE) 白俄罗斯(BY) 科威特(KW) 突尼斯(TN) 约旦(JO) 罗马尼亚(RO) 苏丹(SD) 莫桑比克(MZ) 萨摩亚(WS) 赞比亚(ZM) 赤道几内亚(GQ) 阿塞拜疆(AZ) 阿富汗(AF) 阿曼(OM) 阿根廷(AR) 马拉维(MW) 马达加斯加(MG) 马里(ML) 黎巴嫩(LB) 圭亚那(GY) 斐济(FJ) 新喀里多尼亚(NC)
typecho文章免登陆付费阅读插件付费阅读自媒体插件源码。 一、插件简介 一个可以让Typecho站长使用付费阅读功能的插件,支持免登录付费,并且包含前台用户中心、积分商城功能,适合各个自媒体用户使用的WeMediaForTypecho自媒体付费阅读插件。 二、特别注意 用户中心和积分商城未测试仅供参考,并且该页面浏览器兼容及极速模式兼容较差,插件主要提供阅读付费功能,请知悉。 三、版本推荐 php5.6以上+MySql 四、使用方法 1、首先当然是将插件文件夹以WeMedia为名放到/usr/plugins/目录下,再到typecho后台启用; 2、再点击设置配置插件各项参数; 3、然后在你的原创文章之中点击编辑器里的“¥付费阅读”按钮,插入付费阅读标签,中间内容即为收费内容
基于双路神经网络和多输入时频图像算法的滚动轴承故障诊断研究——涵盖振动信号与多种时频算法的数据集实践(支持小波变换、短时傅里叶变换等),基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变,短时傅里叶变,马尔可夫变迁场,格拉姆角场等 数据集可选凯斯西储大学,东南大学,江南大学等等 Pytorch和Tensorflow框架做的。 ,关键词:双路神经网络;滚动轴承故障诊断;多输入故障诊断方法;原始振动信号;二维信号时频图像;小波变换;短时傅里叶变换;马尔可夫变迁场;格拉姆角场;Pytorch框架;TensorFlow框架;凯斯西储大学数据集;东南大学数据集;江南大学数据集。,基于双路神经网络的滚动轴承故障诊断:多输入时频图像融合诊断方法研究与应用
指针初阶的基础知识
sina-weibo-crawler-master.zip
qdjango-db简单包装
基于MPC的P2构型混合动力汽车能量管理策略研究与应用,基于MPC的混合动力汽车能量管理策略 整车构型为P2构型的混合动力汽车 ,核心关键词:MPC(模型预测控制); 混合动力汽车; 能量管理策略; P2构型整车构型; 汽车能量管理。,基于MPC的P2构型混合动力汽车能量管理策略优化
MMC储能技术揭秘:模块化多电平变换器与正负序解耦控制的不平衡电网谐波补偿策略,MMC储能,mmc,模块化多电平变器储能,储能变器,多电平储能,soc均衡控制,两级式mmc,正负序解耦控制,正负序分离,不平衡控制,不平衡电网,谐波补偿,载波移相调制 ,核心关键词:MMC储能; 模块化多电平变换器储能; 储能变换器; 多电平储能; SOC均衡控制; 两级式MMC; 正负序解耦控制; 不平衡控制; 不平衡电网; 谐波补偿; 载波移相调制。,《MMC储能系统:多电平SOC均衡控制与不平衡电网谐波补偿研究》
基于组态王与西门子S7-200 PLC的六层电梯控制设计:图纸、IO分配与源代码全解析,西门子S7-200PLC和组态王的6层电梯六层电梯控制组态设计PLC设计 基于组态王和S7-200 PLC的六层电梯6层电梯控制 基于组态王和S7-200 PLC的六层电梯8层电梯控制 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 组态王动画仿真,带PLC源代码,plc程序每一条都带着解释,组态王源代码,图纸,IO地址分配 ,西门子S7-200PLC; 组态王; 电梯控制; 6层/8层电梯; PLC设计; 梯形图程序; 接线图原理图; IO分配; 组态画面动画仿真; PLC源代码; 组态王源代码; 图纸。,基于S7-200 PLC与组态王的六层电梯控制系统设计与实现
基于web的老年活动中心管理系统的设计与实现(论文+源码)_kaic.zip
"基于LCL滤波器的单相逆变器并网控制电路仿真研究:dq坐标系网侧电流闭环控制的实现与验证",单相逆变器并网控制电路仿真。 网侧采用LCL滤波器。 基于dq坐标系的网侧电流闭环控制。 仿真中在0.3秒和0.6秒出更改了网侧电流给定值,以验证闭环控制效果,可实现较好地跟随,且网侧电压维持220ac不变。 运行环境为matlab simulink plecs等 ,单相逆变器; LCL滤波器; dq坐标系电流闭环控制; 网侧电流给定值调整; 电压稳定; MATLAB Simulink PLECS仿真。,"单相逆变器LCL滤波的网侧电流闭环控制仿真研究"
基于FPGA开发板的自适应滤波器设计,融合FIR、IIR滤波器与LMS、NLMS、RLS算法及FxLMS分数阶技术,基于FPGA的自适应滤波器FIR IIR滤波器LMS NLMS RLS算法 FxLMS 分数阶 本设计是在FPGA开发板上实现一个自适应滤波器,只需要输入于扰信号和期望信号(混合信号)即可得到滤波输出,使用非常简单。 ,关键词:FPGA; 自适应滤波器; FIR IIR滤波器; LMS NLMS RLS算法; FxLMS算法; 分数阶。,"FPGA自适应滤波器:基于分数阶的FIR与IIR滤波器实现LMS、NLMS及RLS算法"