图片描述

最近需要把一些功能拆分为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已经变成了一种“世界观”了么...


fxp
462 声望59 粉丝

coder in action