分享 API service 的开发

fredwu · 2012年03月11日 · 最后由 ruohanc 回复于 2013年12月11日 · 5236 次阅读

虽然Rails社区非常的成熟,但是很令人意外的是,开发API web service方面的资料非常之少。

Intridea有个Grape:https://github.com/intridea/grape 但是与Rails以及其他的gem配合度不够高。

袋鼠国的Darcy Laycock前几天发布了个新的gem,RocketPants:https://github.com/filtersquad/rocket_pants 用来开发API service,与Rails的配合度较高。

但是,对于简单的API service/client架构,ActiveResource还是最方便的。

经过测试,报告给大家,可以结合RocketPants + ActiveResource + InheritedResources (https://github.com/josevalim/inherited_resources) 一起使用,效果非常不错。

RocketPants用来控制API版本,以及JSON的错误输出。

很好很强大。:)

共收到 18 条回复

awesome , thanks

讨厌web service,脱裤子放屁

我感觉 Rails 配合 Jbuilder 木有什么问题阿

gem 'jbuilder', '~> 0.3.2'
gem 'rabl', '~> 0.5.4'

jbuilder要稍快那么一点

对了, 我想问下, 这个API的版本具体是有神马作用?

#5楼 @lainuo 控制不同版本的routing规则啊。

今天我花了一下午把API service的app改造成了既可以单独使用,又可以被mount的rails engine。^_^

@fredwu 还是有些不大明白, 不同版本的routing规则是指下面这样吗?

/api/v1/xxx
/api/v2/xxx

还有神马时候需要用到版本这个概念呢? 直接没有版本的概念上API有什么弊端?

#7楼 @lainuo 是的。

没有版本的API,基本上是没法开放使用的……

@fredwu 不明白为什么没有版本, 就没法开放使用.

就一个版本, 然后保持一致不就行了么? 我觉得把版本号放在URI里很不好啊.

#9楼 @lainuo 我觉得看需求吧,如果是开放给别人用的api,肯定要有版本。如果是自己用,就不需要了

@ywencn 开放给别人, 肯定要有版本, 为什么? 能进一步解释下吗?

#11楼 @lainuo 开放给别人使用的api就应该是稳定可靠的, 不能随意变动。 如果要加新功能,对原有api改动较大, 就可以加版本号,使新老版本同时运行。

还在用action webservice

我明白了, 主要就是为了向下兼容.

找到这个, 大家看看: http://stackoverflow.com/questions/389169/best-practices-for-api-versioning

#14楼 @lainuo 这个帖子很不错

API各个公司的方式方法都有不一样,这就是为啥没有统一的解决方案的原因,用了这个以后很多东西就不太灵活了。

@fredwu activeResource 好像不能自定义 API 签名啊.? 看起来只支持 Basic Auth 和 Digest. 但是我需要自定义签名, 以防止 replay attack. 没找到怎么实现..

RocketPants 很好用, 赞!

就是文档不太全, 得看源码才明白怎么用

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册