最近需要把一些功能拆分为HTTP API,于是找到了它。Repose是一款开源的API中间件,它可以帮你轻松实现那些API设计里最基本的功能,诸如认证,限速,验证,Logging等。Repose是Rackspace旗下的产品,所以靠谱程度很高。
当你写了个一个页面Parser,一个“1秒钟算1BIL次蛋疼指数”的程序,一个通过一个mail判断一个人是不是靠谱的“占卜服务”之后。若果你想让更多的人能享受到你的智慧,最简单的想法就是把代码开源出去。但很多人是不愿意这样做的,于是就会想到把它作成网络服务,收费提供出去。也就变成了前面二十多篇文章介绍的各种API服务。
API hosting as a Service
经过这多年的积累,Web API服务已经逐渐形成了一套相对标准的做法,从各种开放平台的做法就能看出来。
- 注册平台账号
- 创建App,获得AppKey(也许需要付费)
- 将SDK嵌入自己应用
- 用AppKey初始化SDK
- 开始调用各种API(也许需要付费,也许会限速)
工程师用多了这类产品以后,遇到新的服务往往就会轻车熟路的不用看任何Tutorial。直到有一天,工程师决定自己也要搞一套这样的服务,问题就出现了。这几个环节具体都要如何实现呢?
于是就在API as a Service(其实就是只提供API的Software as a Service)之外,出现了个API hosting as a Service的概念(是不是觉得XaaS特别Ass...)。也就是我帮你托管你的API,帮你做掉前面那些步骤的事儿,您安心开发您的核心算法,提高效率,降低错误率就好啦。其实,对于Amazon这样的老早就看到解耦合,把业务都拆分成细小服务的公司来说,这个概念已经太古老了。
同样提供这类服务的也有不少,比如界面做的太漂亮的Apiary.io,搭建API全生态链的Mulesoft。但因为我是想搭建在自己的服务器上的,所以暂时不考虑那些托管的平台。
Repose
感慨于Docker神速的发展,Respose最简单的部署方法就是部署一个Docker container。隐隐就已经看到了一个Repose as a Service的产品了...
Repose的工作原理很简单,就是在你的裸API和用户之间做一个代理。
文档中描述的Repose的基本功能如下。
- Translating。API格式转换。
- Rate。限速。
- Authenticating。
- Validating。保证API符合Web Application Description标准。
- Logging。
- Blacklisting。credentials and roles
- Caching。
- Role-based access control (RBAC)。基于角色访问控制。
- Mapping the state of your API。好吧,没懂,估计是类似NAT那样的玩意儿吧。
有好几种部署方法,嵌入源码,WAR,独立Proxy server,独立Proxy server cluster。我们肯定不能假设服务器是java的,所以肯定选择独立Proxy server这种模式。
配置里最重要的就是Destination endpoint,一个典型的如下,很清晰的描述一个即将被封装的API endpoint。(又看到了xml配置文件,让一个former javaer还是感慨良多)
<endpoint id="example service" protocol="http" hostname="myapi.com" root-path="/" port="80" default="true"/>
由于还没有图形界面配置的功能呢,所以强烈建议从Repose+101入手。装个Virtualbox,里面装docker。
// TODO 过两天把装了Repose的VM传上去
Repose里除了刚才提到的Endpoint以外还有两个重要概念,filter和service。filter就是一个request一路经过的劫难。service就是诸如分布式数据库之类的东西。
Mock Server & Config
nodejs写一个简单的mock server来假装一个牛逼服务。node app.js
跑起来。
var express = require('express');
var app = module.exports = express();
app.get('/api/nbservice', function(req, res){
res.send('cool to die');
});
app.listen(8080);
写一个简单的Repose配置
<system-model xmlns="http://docs.rackspacecloud.com/repose/system-model/v2.0">
<repose-cluster id="repose">
<nodes>
<node id="node1" hostname="localhost" http-port="8888"/>
</nodes>
<filters>
<filter name="http-logging" />
<filter name="default-router"/>
</filters>
<destinations>
<endpoint id="nbrepose" protocol="http" hostname="localhost" root-path="/" port="8080" default="true"/>
</destinations>
</repose-cluster>
</system-model>
刚才说到建议装docker,其实吧,最简单的还是直接跑jar~从maven上当他们最新的jar。运行java -jar valve-2.3.5.jar start -p 8888 -c /etc/repose/
执行起来。
然后呢,curl 127.0.0.1:8888/api/nbservice
就能看到它跑通啦~
Freelancer
在搜索这个主题内容的时候,遇到了这个老牌Freelancer网站的一个服务,居然叫RESTful hire。其实就是在技能里要有RESTful这一项而已。难道,RESTful已经变成了一种“世界观”了么...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。