2014-10-22 38 views
0

我正在構建一個返回JSON字符串的API。然而,我的目標是圍繞包含有關返回結果的各種元數據屬性以及返回結果的結果進行通用包裝。如何在我的燒瓶API中返回一個常見的JSON對象?

  • 總數的結果(我不容許用戶在同一時刻查詢1000餘人,因此他們需要知道,如果有更多這樣他們就可以請求下一個結果集)
  • 油門時間(告訴用戶向後退,用於在一段時間內的下一個請求之前 - 有用的,如果所述API是忙)
  • 數據用戶請求
  • 錯誤代碼/消息

我的JSON對象將看起來像這樣:

{ 
    'total_results': 1001, 
    'throttle': 0, 
    'error_cd': 0, 
    'message': 'Successful', 
    'results': [ 
     # Data that is returned; Each end point can return a different "type" 
     ] 
} 

目標是讓我的終點只返回出現在results(甚至不是JSON格式)中的數據。我的問題是我怎樣才能提供一個包裝呢?

我最初的想法是運行jsonify的某種裝飾器,但是裝飾器可以在函數後運行嗎? IE瀏覽器。我可以在我的路線中運行代碼,然後運行裝飾器代碼?

+0

@AlexWoolford,你的意思是把我的每個終點的邏輯?這似乎......效率低下。 – NewGuy 2014-10-22 03:30:55

回答

3

剛剛寫封裝函數呢?我可能會這樣做:

@app.route('/api/blah/') 
def my_route(): 
    results = calculate_my_results() 
    return jsonify(format_api_result(results)) 

def format_api_result(data): 
    # add in your extra metadata here, return a dictionary 

功能似乎是我最直接,最靈活的方式來做你想做的。這是一個額外的代碼,但它是一個裝飾器。雖然你當然可以在裝飾器中做到這一點,但除複雜性之外,我認爲它不會增加太多。

如果你想要去的裝飾路線,看看這個:

http://www.jeffknupp.com/blog/2013/11/29/improve-your-python-decorators-explained/

用於裝飾是如何工作的一個很好的解釋,以及如何準確控制包裝的函數被調用。

如果我誤解了你想要做的事情,請告訴我。