Flask-RESTful和Swagger: Python web應用程式中建立RESTful API的最佳實踐(第二部分)
在上一篇文章中,我們探討如何使用Flask-RESTful和Swagger來建立RESTful API的最佳實務。我們介紹了Flask-RESTful框架的基礎知識,並展示如何使用Swagger來建立RESTful API的文件。本文將繼續深入探討這些主題,並介紹更高階的技術和實務。
RESTful API應該是安全的,保證只有授權的使用者才能存取。為了實現這一點,我們需要使用Authorization和Authentication。 Authorization是決定使用者是否被允許存取某個資源的過程。 Authentication是驗證使用者身分的過程。
Flask-RESTful提供了一個非常好用的擴展,Flask-JWT。 Flask-JWT可以幫助我們實現基於令牌的身份驗證和權限管理。這裡我們簡單介紹一下如何使用Flask-JWT來實作令牌身份驗證。
from flask import Flask from flask_jwt import JWT, jwt_required, current_identity from werkzeug.security import safe_str_cmp app = Flask(__name__) app.config['SECRET_KEY'] = 'super-secret' class User: def __init__(self, id, username, password): self.id = id self.username = username self.password = password def __str__(self): return "User(id='%s')" % self.id users = [ User(1, 'john', 'pass'), User(2, 'susan', 'pass'), ] username_table = {u.username: u for u in users} userid_table = {u.id: u for u in users} def authenticate(username, password): user = username_table.get(username, None) if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')): return user def identity(payload): user_id = payload['identity'] return userid_table.get(user_id, None) jwt = JWT(app, authenticate, identity) @app.route('/protected') @jwt_required() def protected(): return '%s' % current_identity if __name__ == '__main__': app.run()
在上面的程式碼中,我們建立了一個連接到Flask應用程式的JWT物件。 JWT物件使用Flask app的SECRET_KEY來加密和解密令牌。我們也定義了一個用戶類,用戶資訊儲存在users列表中。
在定義身份驗證函數authenitcate時,我們檢查使用者名稱是否存在,並攜帶了密碼資訊。如果密碼驗證通過,那麼函數傳回使用者物件。在定義身份函數identity時,我們會傳回通過身份驗證的使用者物件。
在@app.route('/protected')裝飾器下,使用了@jwt_required()裝飾器來保護這個端點,確保只有身份驗證通過且有授權的用戶才能存取。
版本控制是一個非常重要的概念,因為它可以讓客戶端和伺服器之間的互動穩定和向後相容。一個API應該盡可能保持與客戶端和伺服器之間的兼容性,特別是在API的重大改變時。為了實現版本控制,我們需要在API中引入版本號。
以下是一個很好的版本控制實作:
from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) version = 'v1' class HelloWorld(Resource): def get(self): return {'version': version, 'message': 'Hello World'} api.add_resource(HelloWorld, f'/{version}/') if __name__ == '__main__': app.run()
在上面的程式碼中,我們定義了version變數來指定API的版本,然後在@app.route裝飾器中使用f-{version}-字串來新增版本號。這樣就可以實現版本控制,讓客戶端和伺服器之間的介面相容性更好。
Flask-RESTful提供了許多可擴充性的插件,它們可以幫助你更快、更容易建立RESTful API。以下是一些常用的擴充功能:
這些擴充功能可幫助你更有效地建立RESTful API。
總結
本文深入探討如何使用Flask-RESTful和Swagger來建立RESTful API的最佳實踐。我們介紹如何使用Authorization和Authentication來確保API的安全性,以及如何實作版本控制。同時,為了更好地建構API,我們也介紹了一些常用的Flask擴充。這些實踐將幫助你更快速地建立RESTful API,並讓客戶端和伺服器之間的互動更加穩定和向後相容。
以上是Flask-RESTful和Swagger: Python web應用程式中建立RESTful API的最佳實務(第二部分)的詳細內容。更多資訊請關注PHP中文網其他相關文章!