2016-04-20 47 views
2

這裏有一個簡單的瓶的RESTful資源:如何使用Flask-Restful訪問具有多個端點的資源?

class ListStuff(Resource): 
    def get(self): 
     stuff = SomeFunctionToFetchStuff() 
     if re.match('/api/', request.path): 
      return {'stuff': stuff} 
     return make_response("{}".format(stuff), 200, {'Content-Type': 'text/html'}) 

api.add_resource(ListStuff, '/list', '/api/list', endpoint='list') 

我的想法是讓用戶通話雙方/list/api/list。如果他們使用第一個URL,他們將取回數據的HTML表示。如果他們使用第二個URL,他們將得到一個JSON表示。

我的問題是當我想訪問程序中其他地方的這個端點的URL。我不能只用url_for('list'),因爲那樣會總是返回/list,無論用戶是否訪問http://host.example.com/listhttp://host.example.com/api/list

所以,我怎麼能建立/api/list的網址是什麼?

+2

你必須添加其他資源爲 '/ API /列表' –

+0

如api.add_resource(ListStuff, '/列表')api.add_resource(ListStuff, '/ API /列表') –

+0

哈桑,謝謝對於這個想法,但並不像我已經用'api.add_resource(ListStuff,'/ list','/ api/list',endpoint ='list')'得到的結果一樣。無論哪種情況,我將如何構建'/ api/list'的URL? –

回答

2

看起來像哈桑是正確的軌道 - 我可以添加一個新的資源爲同一類,但給它一個不同的端點。

api.add_resource(ListStuff, '/list', endpoint='list') 
api.add_resource(ListStuff, '/api/list', endpoint='api-list') 

>>> print('URL for "list" is "{}"'.format(url_for('list')) 
>>> print('URL for "api-list" is "{}"'.format(url_for('api-list')) 

URL for "list" is "/list" 
URL for "api-list" is "/api/list"