Heim  >  Artikel  >  Backend-Entwicklung  >  Flask-RESTful und Swagger: Best Practices zum Erstellen von RESTful-APIs in Python-Webanwendungen (Teil 2)

Flask-RESTful und Swagger: Best Practices zum Erstellen von RESTful-APIs in Python-Webanwendungen (Teil 2)

王林
王林Original
2023-06-17 10:39:351677Durchsuche

Flask-RESTful und Swagger: Best Practices zum Erstellen von RESTful-APIs in Python-Webanwendungen (Teil 2)

Im vorherigen Artikel haben wir die Best Practices zum Erstellen von RESTful-APIs mithilfe der Flask-RESTful- und Swagger-Praxis untersucht. Wir stellten die Grundlagen des Flask-RESTful-Frameworks vor und zeigten, wie man mit Swagger Dokumentation für eine RESTful-API erstellt. Dieser Artikel befasst sich weiterhin mit diesen Themen und stellt fortgeschrittenere Techniken und Praktiken vor.

  1. Autorisierung und Authentifizierung verwenden

RESTful API sollte sicher sein und sicherstellen, dass nur autorisierte Benutzer darauf zugreifen können. Um dies zu erreichen, müssen wir Autorisierung und Authentifizierung verwenden. Bei der Autorisierung handelt es sich um den Prozess, bei dem festgestellt wird, ob ein Benutzer auf eine Ressource zugreifen darf. Bei der Authentifizierung handelt es sich um den Prozess der Überprüfung der Identität eines Benutzers.

Flask-RESTful bietet eine sehr nützliche Erweiterung, Flask-JWT. Flask-JWT kann uns bei der Implementierung einer tokenbasierten Authentifizierung und Berechtigungsverwaltung helfen. Hier stellen wir kurz vor, wie Flask-JWT zur Implementierung der Token-Authentifizierung verwendet wird.

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()

Im obigen Code erstellen wir ein JWT-Objekt, das mit der Flask-Anwendung verbunden ist. Das JWT-Objekt verwendet den SECRET_KEY der Flask-App, um das Token zu verschlüsseln und zu entschlüsseln. Wir definieren auch eine Benutzerklasse und Benutzerinformationen werden in der Benutzerliste gespeichert.

Bei der Definition der Authentifizierungsfunktion authenitcate prüfen wir, ob der Benutzername existiert und die Passwortinformationen trägt. Wenn die Passwortüberprüfung erfolgreich ist, gibt die Funktion das Benutzerobjekt zurück. Bei der Definition der Identitätsfunktion geben wir das authentifizierte Benutzerobjekt zurück.

Unter dem @app.route('/protected')-Dekorator wird der @jwt_required()-Dekorator verwendet, um diesen Endpunkt zu schützen und sicherzustellen, dass nur authentifizierte und autorisierte Benutzer darauf zugreifen können.

  1. Implementierung der Versionskontrolle

Die Versionskontrolle ist ein sehr wichtiges Konzept, da sie die Interaktion zwischen Client und Server stabil und abwärtskompatibel macht. Eine API sollte die Kompatibilität zwischen Clients und Servern so weit wie möglich aufrechterhalten, insbesondere wenn größere Änderungen an der API vorgenommen werden. Um eine Versionskontrolle zu erreichen, müssen wir Versionsnummern in die API einführen.

Das Folgende ist eine gute Versionierungspraxis:

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()

Im obigen Code haben wir die Versionsvariable definiert, um die Version der API anzugeben, und dann f-{version}-string im @app.route-Dekorator verwendet, um die hinzuzufügen Versionsnummer. Dies ermöglicht eine Versionskontrolle und eine bessere Schnittstellenkompatibilität zwischen Client und Server.

  1. Andere Erweiterungen verwenden

Flask-RESTful bietet viele Erweiterungs-Plugins, mit denen Sie RESTful-APIs schneller und einfacher erstellen können. Hier sind einige häufig verwendete Erweiterungen:

  • Flask-CORS: Lösen Sie das Problem des domänenübergreifenden Zugriffs von Anwendungen.
  • Flask-Bcrypt: Bietet eine Bcrypt-Passwort-Hashing-Funktion zum Verschlüsseln von Passwörtern.
  • Flask-Migrate: Bietet Datenmigrations- und Datenbank-Upgrade-Funktionen.
  • Flask-Login: Bietet Benutzeranmeldefunktion.

Diese Erweiterungen helfen Ihnen, RESTful-APIs effizienter zu erstellen.

Zusammenfassung

Dieser Artikel befasst sich eingehend mit Best Practices für die Verwendung von Flask-RESTful und Swagger zum Erstellen von RESTful-APIs. Wir haben vorgestellt, wie Sie mithilfe von Autorisierung und Authentifizierung die Sicherheit von APIs gewährleisten und wie Sie die Versionskontrolle implementieren. Gleichzeitig führen wir zur besseren Erstellung von APIs auch einige häufig verwendete Flask-Erweiterungen ein. Diese Vorgehensweisen helfen Ihnen, RESTful-APIs schneller zu erstellen und die Interaktion zwischen Client und Server stabiler und abwärtskompatibel zu gestalten.

Das obige ist der detaillierte Inhalt vonFlask-RESTful und Swagger: Best Practices zum Erstellen von RESTful-APIs in Python-Webanwendungen (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn