概念:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
設(shè)計(jì)規(guī)則:http://www.ruanyifeng.com/blog/2011/09/restful.html
Django REST framework:http://www.tuicool.com/articles/zUbymyM
Django REST framework:http://www.cnblogs.com/holbrook/archive/2012/02/19/2358704.html
Django REST framework官方教程:http://wenku.baidu.com/link?url=SJ-m2PgJn9NEZVO24Ulq_8Qsa9tpQLaQDAbfqAPJVSmW_eEuf9R-AX_ieeXyHfzGIbiaj4sRqvLuRjjXdbgzleF_h4xr5n6kORN4Vg3xT5K
這實(shí)際上可以把一個(gè)類的所有屬性和方法調(diào)用全部動(dòng)態(tài)化處理了,不需要任何特殊手段。
這種完全動(dòng)態(tài)調(diào)用的特性有什么實(shí)際作用呢?作用就是,可以針對(duì)完全動(dòng)態(tài)的情況作調(diào)用。
舉個(gè)例子:
現(xiàn)在很多網(wǎng)站都搞REST API,比如新浪微博、豆瓣啥的,調(diào)用API的URL類似:
http://api.server/user/friendshttp://api.server/user/timeline/list
如果要寫SDK,給每個(gè)URL對(duì)應(yīng)的API都寫一個(gè)方法,那得累死,而且,API一旦改動(dòng),SDK也要改。
利用完全動(dòng)態(tài)的getattr,我們可以寫出一個(gè)鏈?zhǔn)秸{(diào)用:
class Chain(object):
def __init__(self, path=''):
self._path = path
def __getattr__(self, path):
return Chain('%s/%s' % (self._path, path))
def __str__(self):
return self._path
>>> Chain().status.user.timeline.list
'/status/user/timeline/list'
這樣,無論API怎么變,SDK都可以根據(jù)URL實(shí)現(xiàn)完全動(dòng)態(tài)的調(diào)用,而且,不隨API的增加而改變!
還有些REST API會(huì)把參數(shù)放到URL中,比如GitHub的API:
GET /users/:user/repos
調(diào)用時(shí),需要把:user替換為實(shí)際用戶名。如果我們能寫出這樣的鏈?zhǔn)秸{(diào)用:
Chain().users('michael').repos
就可以非常方便地調(diào)用API了。有興趣的童鞋可以試試寫出來。