編寫(xiě)api
自從Roy Fielding博士在2000年他的博士論文中提出(Representational State Transfer)風(fēng)格的軟件架構(gòu)模式后,REST就基本上迅速取代了復(fù)雜而笨重的SOAP,成為Web API的標(biāo)準(zhǔn)了。
什么是Web API呢?
1. Web API 和 API 的區(qū)別
1.1 API的概念
API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件得以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,無(wú)需理解其內(nèi)部工作機(jī)制細(xì)節(jié),只需直接調(diào)用使用即可。
舉例解釋什么是API。 例如, ? C語(yǔ)言中有一個(gè)函數(shù) fopen()可以打開(kāi)硬盤(pán)上的文件,這個(gè)函數(shù)對(duì)于我們來(lái)說(shuō),就是一個(gè)C語(yǔ)言提供的打開(kāi)文件的工具。 ? javascript中有一個(gè)函數(shù)alert()可以在頁(yè)面彈一個(gè)提示框,這個(gè)函數(shù)就是js提供的一個(gè)彈框工具。 這些工具(函數(shù))由編程語(yǔ)言提供,內(nèi)部的實(shí)現(xiàn)已經(jīng)封裝好了,我們只要學(xué)會(huì)靈活的使用這些工具即可。
1.2 Web API的概念
? Web API 是瀏覽器提供的一套操作瀏覽器功能和頁(yè)面元素的 API ( BOM 和 DOM )。
? 現(xiàn)階段我們主要針對(duì)于瀏覽器講解常用的 API , 主要針對(duì)瀏覽器做交互效果。比如我們想要瀏覽器彈出一個(gè)警示框, 直接使用 alert(‘彈出’)
?? 因?yàn)?Web API 很多,所以我們將這個(gè)階段稱(chēng)為 Web APIs。
? 此處的 Web API 特指瀏覽器提供的一系列API(很多函數(shù)或?qū)ο蠓椒?,即操作網(wǎng)頁(yè)的一系列工具。例如:操作html標(biāo)簽、操作頁(yè)面地址的方法。
1.3 API 和 Web API 總結(jié)
- API 是為我們程序員提供的一個(gè)接口(taobao平臺(tái)API接口調(diào)用),幫助我們實(shí)現(xiàn)某種功能,我們會(huì)使用就可以了,不必糾結(jié)內(nèi)部如何實(shí)現(xiàn)
- Web API 主要是針對(duì)于瀏覽器提供的接口,主要針對(duì)于瀏覽器做交互效果。
- Web API 一般都有輸入和輸出(函數(shù)的傳參和返回值),Web API 很多都是方法(函數(shù))
- 學(xué)習(xí) Web API 可以結(jié)合前面學(xué)習(xí)內(nèi)置對(duì)象方法的思路學(xué)習(xí)
如果我們想要獲取一篇Blog,輸入http://localhost:9000/blog/123
,就可以看到id為123
的Blog頁(yè)面,但這個(gè)結(jié)果是HTML頁(yè)面,它同時(shí)混合包含了Blog的數(shù)據(jù)和Blog的展示兩個(gè)部分。對(duì)于用戶來(lái)說(shuō),閱讀起來(lái)沒(méi)有問(wèn)題,但是,如果機(jī)器讀取,就很難從HTML中解析出Blog的數(shù)據(jù)。
如果一個(gè)URL返回的不是HTML,而是機(jī)器能直接解析的數(shù)據(jù),這個(gè)URL就可以看成是一個(gè)Web API。比如,讀取http://localhost:9000/api/blogs/123
,如果能直接返回Blog的數(shù)據(jù),那么機(jī)器就可以直接讀取。
REST就是一種設(shè)計(jì)API的模式。最常用的數(shù)據(jù)格式是JSON。由于JSON能直接被JavaScript讀取,所以,以JSON格式編寫(xiě)的REST風(fēng)格的API具有簡(jiǎn)單、易讀、易用的特點(diǎn)。
編寫(xiě)API有什么好處呢?由于API就是把Web App的功能全部封裝了,所以,通過(guò)API操作數(shù)據(jù),可以極大地把前端和后端的代碼隔離,使得后端代碼易于測(cè)試,前端代碼編寫(xiě)更簡(jiǎn)單。
一個(gè)API也是一個(gè)URL的處理函數(shù),我們希望能直接通過(guò)一個(gè)@api
來(lái)把函數(shù)變成JSON格式的REST API,這樣,獲取注冊(cè)用戶可以用一個(gè)API實(shí)現(xiàn)如下:
@get('/api/users')
def api_get_users(*, page='1'):
page_index = get_page_index(page)
num = yield from User.findNumber('count(id)')
p = Page(num, page_index)
if num == 0:
return dict(page=p, users=())
users = yield from User.findAll(orderBy='created_at desc', limit=(p.offset, p.limit))
for u in users:
u.passwd = '******'
return dict(page=p, users=users)
只要返回一個(gè)dict
,后續(xù)的response
這個(gè)middleware
就可以把結(jié)果序列化為JSON并返回。
我們需要對(duì)Error進(jìn)行處理,因此定義一個(gè)APIError
,這種Error是指API調(diào)用時(shí)發(fā)生了邏輯錯(cuò)誤(比如用戶不存在),其他的Error視為Bug,返回的錯(cuò)誤代碼為internalerror
。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-424780.html
客戶端調(diào)用API時(shí),必須通過(guò)錯(cuò)誤代碼來(lái)區(qū)分API調(diào)用是否成功。錯(cuò)誤代碼是用來(lái)告訴調(diào)用者出錯(cuò)的原因。很多API用一個(gè)整數(shù)表示錯(cuò)誤碼,這種方式很難維護(hù)錯(cuò)誤碼,客戶端拿到錯(cuò)誤碼還需要查表得知錯(cuò)誤信息。更好的方式是用字符串表示錯(cuò)誤代碼,不需要看文檔也能猜到錯(cuò)誤原因。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424780.html
到了這里,關(guān)于Web API 和 API 的區(qū)別編寫(xiě)api的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!