小帥b今天想跟你聊聊 RESTful API 這玩意,以及如何使用 Python 快速創(chuàng)建你的 API 給別人調(diào)用。 你應(yīng)該經(jīng)常去調(diào)用過 API ,通過一定的規(guī)則就能快速使用別人提供的服務(wù),比如你想要使用人臉身份證比對(duì),就有相應(yīng)的 API 供你使用:
然后你只要調(diào)用這個(gè)接口就能快速實(shí)現(xiàn):
返回結(jié)果:
這樣做的好處就是,我們?cè)诤蠖酥恍枰峁┙涌?,然后前端不管是手機(jī)、PC、微信小程序等,都可以通過這個(gè)接口實(shí)現(xiàn)具體的功能,這樣的話前后端就可以做到互不 “干涉”,分離部署都可以。 那么我們?nèi)绾问褂?Python 去實(shí)現(xiàn)類似這樣的 API 接口,提供服務(wù)給別人使用呢?RESTful API 又是個(gè)什么鬼? 那么接下來就是: 學(xué)習(xí) python 的正確姿勢
什么是 RESTful API? 雖然說 API 你可以自己定制,但是總不能寫成類似這樣的吧:
往往,前后端程序員的矛盾就此產(chǎn)生... 前端: 后端: 所以,寫一個(gè)友好的 API 還是很重要的,而 RESTful API 就是一種流行且友好的風(fēng)格,它主要用來約束 API 的寫法,讓別人使用起來能感到清晰,簡潔,一目了然,使用方便。 像這樣: 我們定義的 URI 需要清晰易于理解,例如:?https://api.fxxkpython.com/shop/products/list?這樣我們一眼就能明白這是請(qǐng)求商品數(shù)據(jù)列表。 盡量通過 JSON 或者 XML 來傳遞數(shù)據(jù)對(duì)象和屬性。 明確的使用 HTTP 方法(例如,get、post、put和delete)。 無狀態(tài),在請(qǐng)求的時(shí)候,服務(wù)端不存儲(chǔ)客戶端的上下文狀態(tài)。 Python 如何創(chuàng)建 RESTful API? 相信你對(duì) Python 的 web 框架有一定的了解:
(來自視頻號(hào):學(xué)習(xí)python的正確姿勢)
而今天要給你介紹的是基于 Flask 框架寫的輕量級(jí)額rest API 框架:FlaskRESTful ,它易于使用,寫法和 Flask 類似,你也可以直接在你項(xiàng)目中的 ORM 層中使用它。
接下來一起看看官方提供的例子,簡單演示一下它的使用。 導(dǎo)入相應(yīng)的庫,定義類資源,在里面可以使用 http 的 get 、put 方法定義接口,接著通過 api 添加資源即可輕松實(shí)現(xiàn)一個(gè) API 接口:
運(yùn)行起來:
訪問:
剛說了,你只要定義好資源類,在里面可以寫多個(gè) http 的 get、put、post 等方法,比如這里你可以使用 put 來添加 data 數(shù)據(jù)到字典中:
在這里可以把請(qǐng)求路徑的 todo_id 作為變量,運(yùn)行起來后你就可以往里相應(yīng)的 put 數(shù)據(jù)了:
使用 get 方法獲?。?/section>
在 add_resource 中,你可以定義多個(gè)路由指向同一個(gè)類資源中去:
訪問:
驗(yàn)證表單數(shù)據(jù)類型,可以使用 reqparse 定義 type:
這樣當(dāng)用戶提交的不是 int 類型會(huì)直接返回錯(cuò)誤信息:
當(dāng)你的 API 想要返回一個(gè)對(duì)象的時(shí)候,可能你需要對(duì)對(duì)象中的參數(shù)定義好類型,可以使用 fields 和 marshal_with 進(jìn)行裝飾,像這樣: