(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已經變成了一種「世界觀」了麼...

相關文章
相關標籤/搜索