三分鐘學會API接口設計 之 Compass 的Restful API 快速入門指南 -- 使用Flask框架

聲明:

本博客歡迎轉載,但請保留原作者信息!

作者:曾國仕

團隊:華爲杭州OpenStack團隊


引子

大部分開源框架基本上都是使用Curl + RPC的方式構築系統,以提供對外\對內的交互能力。

這種設計,本人認爲更多地是出於層次化與模塊化設計的考量,簡化整個架構,使得開發輕量簡單化。

本文主要介紹Compass的REST API的設計與實現。

通過本文檔,讀者至少能快速搭建一個屬於自己的REST API 框架,並且能夠基於該框架進行功能擴展以建立一個完整的系統。

Compass的結構簡介


圖片來源:https://wiki.openstack.org/wiki/Compass#What_is_Compass.3F

 

上圖是Compass的結構圖,該圖內容較多,但是,本文只關心其中的3部分:【Huawei UI】、【Rest Client】、【Restful API Server】。

場景

l  我的應用有一個酷炫的Web界面

l  我的應用的後端是用python開發的,這語言簡單易用

l  我只關心我的業務邏輯如何處理,UI是設計師的事

l  我希望能夠輕鬆地將Python對接Web,這種對接最好是通過Curl命令實現,這會使得我能夠方便地規劃與擴展對外的統一接口

l  我希望我的應用能夠承受住大規模的訪問

實現步驟

爲滿足以上場景的要求,需要藉助於一些框架了。但是在此之前,我們需要先規劃下一步如何走?

我希望我能夠按照如下的步驟來依次實現功能:

 

搭建Restful Api Server

Compass使用Flask。

Flask是一個Python的開源Web框架,使得利用Python進行web開發變得尤其的簡單。

(1)安裝Flask

首先,需要安裝pip工具

           Install:

                  yuminstall wget -y

                  wgethttps://bootstrap.pypa.io/get-pip.py

然後,安裝Flask:

           pipinstall Flask

 

(2)建立一個簡單的WSGI Server

使用Flask內建的WSGI Server起服務:

hello.py:

from flask import Flask

app = Flask(__name__)

 

@app.route("/")

def hello():

    return"Hello World!"

 

@app.route("/test")

def test():

    return"This is a test."

 

if __name__ == "__main__":

    app.run()  ##綁定到默認的本地Localhost地址上

 

Setup:

$ python hello.py

 * Running on http://localhost:5000/

 

利用內嵌的WSGIServer綁定到特定的IP地址上:

 

if __name__ == "__main__":

                      app.run(host='10.0.0.1')

 

(3)測試

                  $curl -i http://127.0.0.1:5000/

                  $curl -i http://127.0.0.1:5000/test/

                  $curl -i http://10.0.0.1:5000/

 

至此,一個簡單的WSGI Server就建立成功了。

但是這個Server只是利用了Flask本身內建的WSGI 服務器進行部署不能滿足實際的生產環境中的需求。

規劃API 接口規範

到了此處,就可以根據實際的業務邏輯,規劃API接口規範了。

實際上是:規劃Curl命令中的url地址,設計request格式與response格式並制定對應的處理方法。

對外提供服務

這部分的功能主要依賴於實際的部署方式。

Flask提供了多種實際生產環境下的部署策略:

mod_wsgi(Apache)

StandaloneWSGI Containers

uWSGI

FastCGI

CGI

Compass使用了mod_wsgi的方式將server搭建在Apache上,並且,統一規劃了Api文件目錄作爲Restful Api 的訪問目錄。

如何認定這是個MVC架構

MVC架構是用來規範開發的,實際開發中並無一個標準規範,每一層也沒有十分清晰的劃分。

在Compass中,Viewer層的業務主要集中在:

@app.route("/test")

def test():

    return"This is a test."

這類函數中,以接收url request並調用相應的方法處理。

實際的處理過程自然比上面的函數複雜,需要多個模塊協同處理,放在Controller層進行實現,可見Compass的Actions這個源碼目錄。

Model層則定義了業務相關的數據模型,在model這個源碼目錄中,也可以找到。




發佈了51 篇原創文章 · 獲贊 48 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章