iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

燃燒大三的成果發表系列 第 19

燃燒大三的成果發表第十九天 - Flask-RESTX(上)

  • 分享至 

  • xImage
  •  

大家好今天要來介紹的是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)

直接一張圖簡單大概說明哪一部份的程式碼會影響哪個區塊

今天就大致上介紹到這邊,明天我會更詳細的介紹每一個區塊裡。


上一篇
燃燒大三的成果發表第十八天 - Flask
下一篇
燃燒大三的成果發表第二十天 - Flask-RESTX(下)
系列文
燃燒大三的成果發表30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言