python web接口實現(xiàn)(restful方式刹淌、jsonrpc方式)

準(zhǔn)備把自己寫的爛網(wǎng)站重構(gòu)一下,讓有些功能能接口分離察滑。之前照著flask web開發(fā)這本書的教程來時,因為是新手所以用最簡單的方式來實現(xiàn)肩袍,當(dāng)時就不會去考慮前后端分離 !!!∑(?Д?ノ)ノ

現(xiàn)在JSON是大勢所趨的主流杭棵,所以我的前后端傳的都是JSON格式數(shù)據(jù)。

后端python: 使用的flask庫和第三方擴展,以登錄頁面的登錄接口為例子魂爪,因為只是簡單例子先舷,所以不包含model部分,只做簡單的邏輯處理滓侍。

前端的ajax: 我都用的是jquery實現(xiàn)蒋川,所以需得導(dǎo)入 jquery

restful風(fēng)格的接口實現(xiàn)例子

1、前端ajax:

<script type="text/javascript">
$(function () {
    $('.btn').click(function () {
        var $email=$('input[name="email"]').val();
        var $password=$('input[name="password"]').val();
        $.ajax({
            url:'/api/login',
            data:JSON.stringify({'email':$email,'password':$password}),
            type:'POST',
            dataType:'json',
            contentType:'application/json',
        }).done(function (data) {
                 if (!data.r){
                    alert('ok');
                }
                else{
                    alert('error');
                }
            });
    });
});
</script>

對class為btn的buttun元素添加點擊事件撩笆,從而獲取輸入的賬號捺球、密碼,再通過jquery的ajax方法發(fā)出json格式的請求夕冲,
最后通過done回調(diào)函數(shù)獲取返回的data氮兵,判斷返回的值來彈出提示。
note:發(fā)出的data,要通過json.stringify轉(zhuǎn)換為字符串

2歹鱼、后端python實現(xiàn):

@app.route('/api/login',methods=['POST'])
def login():
    json=request.get_json()
    email=json.get('email')
    password=json.get('password')
    if email=='tang@163.com' and password=='tmhrush':
        return jsonify({'r':0,"rs":'ok'})
    else:
        return jsonify({'r':1,"rs":'is error'})

通過request.get_json獲取json請求泣栈,通過jsonify函數(shù)返回序列化為json的數(shù)據(jù)

jsonrpc接口的實現(xiàn)例子:

1、前端ajax,

只需要把請求的data參數(shù)內(nèi)容done回調(diào)函數(shù)的內(nèi)容改為jsonrpc規(guī)范的格式就可以了
例如:
data內(nèi)容:

data:JSON.stringify({"jsonrpc": "2.0", "method": "login", "params": {'email':$email,'password':$password} , "id": 1})

回調(diào)函數(shù)done內(nèi)容:

done(function (data) {
                 if ('reuslt' in data ){
                    alert('ok');
               }
                else{
                    alert('error');
                }
            });

2弥姻、后端python實現(xiàn):

用的flask_jsonrpc第三方擴展
其中有一個我覺得的小坑:
flask_jsonrpc 源碼中JSONRPC類的構(gòu)造函數(shù)中參數(shù)app默認(rèn)為None,但同時其中有這段代碼

if app is not None:
    self.app = app
    self.init_app(self.app)
else:
    self.app = None

因為要實例化jsonrpc( JSONRPC類 )對象必須要傳入app(flask實例)參數(shù)
所以有不能在工廠函數(shù)create_app中實例 jsonrpc的問題南片,單獨在 api.py頁面中實例

from flask_jsonrpc import JSONRPC
from flask import jsonify
from .manage import app

jsonrpc = JSONRPC(app, service_url='/api')

@jsonrpc.method('login')
def login ():
     json=request.get_json()
    email=json.get('email')
    password=json.get('password')
    if email=='tang@163.com' and password=='tmhrush':
        return {'r':0,"rs":'ok'}
    else:
        return {'r':1,"rs":'is error'}

通過jsonrpc.method建立視圖函數(shù)和URL接口的映射

from app.manage import manager

from app import api
#導(dǎo)入依賴模板

if __name__=='__main__':
    manager.run()

note:在主模塊中導(dǎo)入api模塊

3、總結(jié)

以上就是這兩種接口的實現(xiàn)方法庭敦。
在我看來jsonrpc方式雖然麻煩一下疼进,但更適合做內(nèi)部程序的webapi接口,RPC協(xié)議使用二進制編碼秧廉,流量消耗小網(wǎng)絡(luò)性能更好伞广。而且RPC就像本地調(diào)用方法,添加接口很方便定血。

所以我覺得對外開放的WEB接口適合用restful風(fēng)格赔癌;而內(nèi)部接口jsonrpc更適合,而且rpc規(guī)范中對異常錯誤處理感覺很工程化澜沟。

首發(fā)于我的個人網(wǎng)站文章灾票,http://www.valkyrie233.com/post/3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茫虽,隨后出現(xiàn)的幾起案子刊苍,更是在濱河造成了極大的恐慌,老刑警劉巖濒析,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件正什,死亡現(xiàn)場離奇詭異,居然都是意外死亡号杏,警方通過查閱死者的電腦和手機婴氮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門斯棒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人主经,你說我怎么就攤上這事荣暮。” “怎么了罩驻?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵穗酥,是天一觀的道長。 經(jīng)常有香客問我砾跃,道長节吮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任课锌,我火速辦了婚禮祈秕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘请毛。我一直安慰自己志鞍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布固棚。 她就那樣靜靜地躺著此洲,像睡著了一般委粉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汁汗,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天知牌,我揣著相機與錄音角寸,去河邊找鬼。 笑死墨吓,一個胖子當(dāng)著我的面吹牛帖烘,可吹牛的內(nèi)容都是我干的橄杨。 我是一名探鬼主播秘症,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乡摹,長吁一口氣:“原來是場噩夢啊……” “哼聪廉!你這毒婦竟也來了故慈?” 一聲冷哼從身側(cè)響起察绷,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拆撼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竭贩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留量,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡肪获,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年孝赫,在試婚紗的時候發(fā)現(xiàn)自己被綠了青柄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虹蒋,靈堂內(nèi)的尸體忽然破棺而出飒货,到底是詐尸還是另有隱情塘辅,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呻惕,受9級特大地震影響蟆融,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玛迄。 院中可真熱鬧蓖议,春花似錦、人聲如沸纺阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽结榄。三九已至臼朗,卻和暖如春蝎土,著一層夾襖步出監(jiān)牢的瞬間瘟则,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工慷嗜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庆械,地道東北人菌赖。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓琉用,卻偏偏與公主長得像邑时,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黍氮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)滚秩,斷路器叔遂,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 22年12月更新:個人網(wǎng)站關(guān)停,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,182評論 22 257
  • 想了很久想寫點什么蚕苇,現(xiàn)在的微信的微博似乎成了曬生活的一種方式涩笤。我想大多數(shù)的人常態(tài)莫過于一邊碌碌無為盒件,一邊又羨慕著...
    等風(fēng)也等你oz閱讀 384評論 0 2
  • 最近在優(yōu)化項目雖說小優(yōu)化一直在持續(xù)炒刁,大版本的優(yōu)化也進行了兩個版本了但是bug列表依舊血淋淋的擺在那里翔始。有的看一眼也...
    初光夫閱讀 1,214評論 2 50
  • 第六章 1 感覺好久沒有去跳舞了飒箭,這些日子蜒灰,從項目的忙碌中抽出身后,我便經(jīng)常和楊麗穎約會盈匾,從當(dāng)初的陌生和羞澀毕骡,到今...
    田野虎閱讀 272評論 3 4