2013-09-30 65 views
4

我正在Python Flask中創建一個REST API,並且想知道創建引用特定git標記的可版本化API的選項。什麼是使用Python Flask運行REST API版本的最佳方式

我想要做的是指定一個API版本,例如http://myapiserver.com/flaskapp/query/listcontent?version=1.1

然後讓版本鏈接返回到我在git中標記爲v1.1的代碼。

有什麼選擇,什麼是最好的管理方式?

+0

閱讀本教程::http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful – rajpy

+0

[這會不會有什麼可以用相同的代碼處理它們你正在尋找?](http://flask-restful.readthedocs.org/en/latest/) – AlexLordThorsen

回答

5

我可以想出兩種方法來支持版本化的API,但是這兩種方式都沒有涉及到應用與其自己的git存儲庫混淆,就像您在您的問題中似乎建議的一樣。

比方說,您有兩個版本的API v1.0和v1.1。

直接的方法是將兩個版本安裝在運行的不同目錄中,每個目錄在不同的localhost端口或unix套接字上偵聽。這兩個版本的路由不需要嵌入版本,例如,兩個版本都可以有一個端點/users。將所有東西聯繫在一起的是反向代理(如nginx),它們將這兩個apis與使用版本控制的外部URL公開,該版本將/v1.0/users映射到v1.0服務器,將/v1.1/users映射到v1.1服務器。

另一種選擇是讓v1.1服務器對v1.1端點和v1.0端點作出響應。在這種情況下,服務器將具有路由中的版本,因此v1.1服務器將同時具有/v1.0/users/v1.1/users。這看起來似乎是一個複雜的問題,因爲每個新的API版本都必須支持所有舊版本,但它也可以被看作是一種優化,因爲對於不改變或者版本之間差別最小的API端點

@app.route('/<version>/users') 
def users(version): 
    # do something 
    return jsonify(response) 
+0

謝謝,我喜歡在第一個簡單的方式作爲通過引用git我只是要簽出構建與特定標籤到目錄。在路徑起始處使用版本似乎更適合服務器部署,而不是使用查詢字符串,儘管我也在研究重寫規則以支持這一點。 – Andrew

相關問題