大家好今天要來介紹的是Flask-RESTX,Flask-RESTX是Flask一個能夠更方便設計REST API的擴充套件,同時也提供使用swagger能夠快速產生REST API文件,短短一句話卻好像有很多東西沒看過。
首先我要先來解釋一下什麼是REST
符合REST設計風格的Web API稱為RESTful API。它從以下三個方面資源進行定義:
- 直觀簡短的資源位址:URI,比如:http://example.com/resources。
- 傳輸的資源:Web服務接受與返回的網際網路媒體類型,比如:JSON,XML,YAML等。
- 對資源的操作:Web服務在該資源上所支援的一系列請求方法(比如:POST,GET,PUT或DELETE)。 - 「維基百科」
REST英文稱作「Representational State Transfer」,是一種架構風格,目的方便在網路中互相傳遞資訊,再根據維基百科定義就是要有簡單的URL、特定的傳輸資源、以及特定操作的方法,如果正在看文章的你是個接觸程式不久的新手,我相信你應該也是有看沒有懂。
簡單來說我會把REST比喻成「對話的風格」,REST就像是有人統一文字、規定文法,該用什麼類型的資料作為傳輸,該用什麼HTTP Method作為動詞,簡短的URL作為受詞,組合在一起發送出去,別人看到就能夠清楚了解這一支API的操作,大概就像我昨天的這張圖片一樣。
另外提一下,如果你跟我一樣什麼都很好奇,跟我一樣很容易往死胡同裡鑽什麼都想搞懂的話,甚至對REST跟RESTful都好奇差別的話,不必太過於糾結,我這邊就順便幫跟我有一樣困擾的夥伴解答,其實RESTful只是形容遵循REST架構風格api的一個詞。
大概瞭解了一下REST API之後我們來談談何謂swagger,如果REST是為了方便互相傳遞資訊,所發表的架構風格,那麼swagger就是為了API文件發表的規範,後來改名叫做「OpenAPI」,swagger本身是一種規範以外,同時也有衍生出很多工具,像是有能夠自動產生文件的;有能夠直接在瀏覽器呈現並直接做測試的。
說了這麼多,看了一下swagger再看一下一開始對flask-RESTX的說明,簡單來說我們今天就是要透過flask的擴充套件來快速產生我們的REST API文件,這個擴充套件使用到的是swagger,這邊我也不會介紹太多功能,只會介紹幾個我很常用的。
安裝Flask-RESTX
安裝完我們直接來個簡單的小範例
from flask import Flask
from flask_restx import Api, Resource, fields
# create flask instance
app = Flask(__name__)
# create flask_restx instance
api = Api(app, version='0.0.1',
title='2022鐵人賽', doc='/api/doc')
add_ns = api.namespace("add_namespace", description='2022鐵人賽_Namespace')
add_payload = add_ns.model('數字加總', {
'number one': fields.Integer(default=1),
'number two': fields.Integer(default=2)
})
add_output = add_ns.model('數字加總結果', {
'number total': fields.Integer(default=3)
})
@add_ns.route('/add')
class Add(Resource):
@add_ns.expect(add_payload)
@add_ns.marshal_with(add_output)
def post(self):
data = add_ns.payload
x = data["number one"]
y = data["number two"]
result = x + y
return result
api.add_namespace(add_ns)
if __name__ == '__main__':
app.run(debug=True)
直接一張圖簡單大概說明哪一部份的程式碼會影響哪個區塊
今天就大致上介紹到這邊,明天我會更詳細的介紹每一個區塊裡。