分享 API service 的开发

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

虽然 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 的错误输出。

很好很强大。:)

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 很好用, 赞!

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

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