(30 hackdays day 28) Repose - 给API穿上衣服

图片描述

最近须要把一些功能拆分为HTTP API,因而找到了它。Repose是一款开源的API中间件,它能够帮你轻松实现那些API设计里最基本的功能,诸如认证,限速,验证,Logging等。Repose是Rackspace旗下的产品,因此靠谱程度很高。java

当你写了个一个页面Parser,一个“1秒钟算1BIL次蛋疼指数”的程序,一个经过一个mail判断一我的是否是靠谱的“占卜服务”以后。若果你想让更多的人能享受到你的智慧,最简单的想法就是把代码开源出去。但不少人是不肯意这样作的,因而就会想到把它做成网络服务,收费提供出去。也就变成了前面二十多篇文章介绍的各类API服务。node

API hosting as a Service

通过这多年的积累,Web API服务已经逐渐造成了一套相对标准的作法,从各类开放平台的作法就能看出来。算法

  • 注册平台帐号
  • 建立App,得到AppKey(也许须要付费)
  • 将SDK嵌入本身应用
  • 用AppKey初始化SDK
  • 开始调用各类API(也许须要付费,也许会限速)

工程师用多了这类产品之后,遇到新的服务每每就会轻车熟路的不用看任何Tutorial。直到有一天,工程师决定本身也要搞一套这样的服务,问题就出现了。这几个环节具体都要如何实现呢?docker

因而就在API as a Service(其实就是只提供API的Software as a Service)以外,出现了个API hosting as a Service的概念(是否是以为XaaS特别Ass...)。也就是我帮你托管你的API,帮你作掉前面那些步骤的事儿,您安心开发您的核心算法,提升效率,下降错误率就好啦。其实,对于Amazon这样的老早就看到解耦合,把业务都拆分红细小服务的公司来讲,这个概念已经太古老了。数据库

一样提供这类服务的也有很多,好比界面作的太漂亮的Apiary.io,搭建API全生态链的Mulesoft。但由于我是想搭建在本身的服务器上的,因此暂时不考虑那些托管的平台。express

Repose

感慨于Docker神速的发展,Respose最简单的部署方法就是部署一个Docker container。隐隐就已经看到了一个Repose as a Service的产品了...segmentfault

Repose的工做原理很简单,就是在你的裸API和用户之间作一个代理。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这种模式。restful

配置里最重要的就是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已经变成了一种“世界观”了么...

相关文章
相关标签/搜索