Flask 學習筆記(二):RESTful API


概括

  1. URL:需要操作的對象,也就是資源
  2. HTTP method:我要對該對象做什么(POST 增、DELETE 刪、GET 查、PUT 和 PATCH 改
  3. HTTP status code:操作的結果

做到這個,就達成了 REST 的第二層。

視圖的定義方式

一般視圖都使用 app.route() 裝飾器定義,但是這種方式顯然不適合用於定義 restful api.
對於 restful 場景,flask 提供了 MethodView 類,可以用基於類的方法來定義視圖函數:

class HttpMethodExample(MethodView):
    def get(self):
        return 'Send request with `GET` method'

    def post(self):
        return 'Send request with `POST` method'

    def put(self):
        return 'Send request with `PUT` method'

    def patch(self):
        return 'Send request with `PATCH` method'

    def delete(self):
        return 'Send request with `DELETE` method'


# 基於 MethodView 構造視圖函數
example_view = HttpMethodExample.as_view('http_method_example2')

# 為該視圖函數添加 url 規則
app.add_url_rule('/http-method-test2/', view_func=example_view)

flask 還提供了 jsonify 與 request.get_json() 用於序列化與反序列化數據。

flask-rest-api

搜了一番 flask rest 庫,發現比較流行的有 flask-restful、flask-restplus、flask-restless 等,剛開始打算用 flask-restplus,因為它能自動生成 swagger api 文檔。
但是發現它的 schema 是用類似 argparser 的方法做的,而且整個響應解析模塊,在新版將被移除,官方推薦用 marshmallow,但是這方面的資料很少。於是又重做打算。

找了一圈,最后找到個 flask-rest-api,這個模塊使用 marshmallow 定義 schema,用 webargs 解析參數,用 apispec 生成 api 文檔。雖然 stars 比較少,但是開發者正是 marshmallow 等幾個流行庫的 co-leader,感覺是有保障的。
當然新 lib 可能會遇到 bug,但是一是開發者很活躍,issue 基本都能很快得到回復,二是我當下做的也是個個人項目,真出點小毛病問題也不大。

於是就選擇了它。這個庫的 docs 寫得很清晰易懂,而且顯然很新手友好,這是我看中它的原因。目前正在使用它開發我的新項目。筆記就。。寫完再說吧。項目都跑不動,就寫筆記,感覺也不太靠譜。。。

畫外 GraphQL

待續

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM