2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Inhaltsverzeichnis
Installation und Konfiguration
02Grundlegende Verwendung von Apispec
Generieren Sie eine einfache API-Dokumentation
1. Erstellen Sie eine Apispec-Instanz
2. Definieren Sie API-Routen und -Ansichten
Integrieren Sie Flask und APIspec
1. Installieren Sie Flask und Flask-Apispec
2. Erstellen Sie eine Flask-Anwendung
Integrieren Sie Django und APIspec
1. Installieren Sie Django und Django-Rest-Framework
2. Erstellen Sie Django-Projekte und -Anwendungen
3. Konfigurieren Sie das Django-Projekt
4. Definieren Sie Django-Ansichten
6. Generieren Sie die OpenAPI-Spezifikation
03Apispecs erweiterte Funktionen
1. Benutzerdefinierter Generator
2. Unterstützen Sie mehrere Frameworks
3. Schnittstellendokumente automatisch generieren
4. Integration mit Tools von Drittanbietern
3. Abhängigkeiten installieren
5. Definieren Sie Ansichten und Serialisierung
6. Definieren Sie die Hauptanwendung
7. Führen Sie die App aus und sehen Sie sich die Dokumentation an
Besuchen Sie http://localhost:5000/swagger/, um die generierte API-Dokumentation anzuzeigen.
Einführung in APIspecs
Apispec ist eine Python-Bibliothek zum Generieren von OpenAPI-Spezifikationen (Swagger). Es kann Entwicklern helfen, API-Dokumente automatisch zu erstellen und zu verwalten und intuitive und detaillierte Schnittstellenbeschreibungen bereitzustellen. Mit Apispec können wir die Dokumentationszeichenfolge einer Python-Funktion oder -Klasse problemlos in ein Dokument konvertieren, das der OpenAPI-Spezifikation entspricht, wodurch der Aufwand beim manuellen Schreiben der Dokumentation verringert wird.
Einfach und leicht zu bedienen: Apispec bietet eine einfache und benutzerfreundliche API, die Ihnen einen schnellen Einstieg ermöglicht.
Flexibel und leistungsstark: Unterstützt mehrere Frameworks (wie Flask, Django) und Erweiterungen, sodass Sie die Dokumenterstellung nach Bedarf anpassen können.
Automatisierung: Reduzieren Sie manuelle Vorgänge und Wartungskosten durch die automatische Generierung und Aktualisierung von Dokumenten.
Bevor wir Apispec verwenden können, müssen wir es zunächst installieren. Sie können es mit pip installieren:
pip install apispec
Github-Projektadresse:
https://github.com/marshmallow-code/apispec
Schauen wir uns die grundlegende Verwendung von Apispec anhand einiger einfacher Beispiele an.
- from apispec import APISpec
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- info=dict(description="This is a sample API"),
- )
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return {"id": user_id, "name": "John Doe"}
- spec.path(
- path="/users/{user_id}",
- operations=dict(
- get=dict(
- description="Get a user by ID",
- parameters=[
- {
- "name": "user_id",
- "in": "path",
- "required": True,
- "schema": {"type": "integer"},
- }
- ],
- responses={
- "200": {
- "description": "A user object",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "id": {"type": "integer"},
- "name": {"type": "string"},
- },
- }
- }
- },
- }
- },
- )
- ),
- )
pip install Flask Flask-Apispec
- from flask import Flask, jsonify
- from flask_apispec import FlaskApiSpec, doc, marshal_with
- from flask_apispec.views import MethodResource
- from marshmallow import Schema, fields
-
- app = Flask(__name__)
-
- class UserSchema(Schema):
- id = fields.Int()
- name = fields.Str()
-
- class UserResource(MethodResource):
- @doc(description='Get a user by ID', tags=['User'])
- @marshal_with(UserSchema)
- def get(self, user_id):
- return {"id": user_id, "name": "John Doe"}
-
- app.add_url_rule('/users/<int:user_id>', view_func=UserResource.as_view('user_resource'))
- docs = FlaskApiSpec(app)
- docs.register(UserResource)
-
- @app.route('/swagger/')
- def swagger_ui():
- return jsonify(docs.spec.to_dict())
-
- if __name__ == '__main__':
- app.run()
pip install django djangorestframework
- django-admin startproject myproject
- cd myproject
- django-admin startapp myapp
Fügen Sie rest_framework und apispec in Settings.py hinzu:
- INSTALLED_APPS = [
- ...
- 'rest_framework',
- 'myapp',
- 'apispec',
- ]
In myapp/views.py:
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from rest_framework.schemas import AutoSchema
-
- class UserView(APIView):
- schema = AutoSchema(
- manual_fields=[
- coreapi.Field('user_id', required=True, location='path', schema={'type': 'integer'})
- ]
- )
-
- def get(self, request, user_id):
- """
- Get a user by ID.
- ---
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return Response({"id": user_id, "name": "John Doe"})
In myapp/urls.py:
- from django.urls import path
- from .views import UserView
-
- urlpatterns = [
- path('users/<int:user_id>/', UserView.as_view(), name='user-view'),
- ]
In manage.py:
- from apispec import APISpec
- from rest_framework.schemas import get_schema_view
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- )
-
- schema_view = get_schema_view(title="My API")
- schema = schema_view.get_schema(request=None, public=True)
- spec.components.schema('User', schema)
- spec.path(path='/users/{user_id}/', operations=schema['paths']['/users/{user_id}/'])
-
- print(spec.to_yaml())
APIspec bietet einen flexiblen Erweiterungsmechanismus, mit dem Sie Generatoren anpassen können. Sie können Ihre eigene Generierungslogik implementieren, indem Sie die von Apispec bereitgestellte Basisklasse erben und erweitern.
- from apispec import BasePlugin
-
- class MyPlugin(BasePlugin):
- def path_helper(self, operations, *, resource, **kwargs):
- operations.update({
- 'get': {
- 'description': 'Get a user by ID',
- 'parameters': [
- {'name': 'user_id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}}
- ],
- 'responses': {
- '200': {
- 'description': 'A user object',
- 'content': {
- 'application/json': {
- 'schema': {
- 'type': 'object',
- 'properties': {
- 'id': {'type': 'integer'},
- 'name': {'type': 'string'}
- }
- }
- }
- }
- }
- }
- }
- })
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- plugins=[MyPlugin()],
- )
Apispec unterstützt eine Vielzahl beliebter Python-Frameworks wie Flask, Django, Falcon usw. Sie können je nach Bedarf geeignete Frameworks und Plug-Ins auswählen, um schnell API-Dokumente zu generieren.
Apispec kann automatisch Schnittstellendokumente basierend auf der Dokumentationszeichenfolge einer Funktion oder Klasse generieren und so den Arbeitsaufwand für das manuelle Schreiben von Dokumenten reduzieren.
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return {"id": user_id, "name": "John Doe"}
Apispec kann in viele Tools von Drittanbietern wie Swagger UI, ReDoc usw. integriert werden, um intuitive Schnittstellendokumentanzeige- und Testfunktionen bereitzustellen.
- from flask import Flask, jsonify
- from flask_apispec import FlaskApiSpec
-
- app = Flask(__name__)
-
- @app.route('/users/<int:user_id>', methods=['GET'])
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return jsonify({"id": user_id, "name": "John Doe"})
-
- docs = FlaskApiSpec(app)
- docs.register(get_user)
-
- if __name__ == '__main__':
- app.run()
Erstellen Sie ein vollständiges API-Dokumentationssystem
Angenommen, wir haben ein einfaches Benutzerverwaltungssystem und müssen dessen API dokumentieren. Unsere API umfasst Vorgänge zum Hinzufügen, Löschen, Ändern und Abfragen von Benutzern sowie einige grundlegende Funktionen zur Identitätsauthentifizierung.
- user_management/
- ├── app.py
- ├── models.py
- ├── views.py
- ├── serializers.py
- └── requirements.txt
Fügen Sie Abhängigkeiten in „requirements.txt“ hinzu:
- Flask
- Flask-RESTful
- Flask-SQLAlchemy
- Flask-Migrate
- apispec
- flask-apispec
Führen Sie den folgenden Befehl aus, um Abhängigkeiten zu installieren:
pip install -r requirements.txt
Definieren Sie das Benutzermodell in models.py:
- from flask_sqlalchemy import SQLAlchemy
-
- db = SQLAlchemy()
-
- class User(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(80), nullable=False)
- email = db.Column(db.String(120), unique=True, nullable=False)
Definieren Sie Benutzerserialisierer in serializers.py:
- from marshmallow import Schema, fields
-
- class UserSchema(Schema):
- id = fields.Int(dump_only=True)
- name = fields.Str(required=True)
- email = fields.Email(required=True)
-
Definieren Sie Ansichten in views.py:
- from flask import request
- from flask_restful import Resource
- from models import User, db
- from serializers import UserSchema
-
- class UserResource(Resource):
- def get(self, user_id):
- user = User.query.get_or_404(user_id)
- schema = UserSchema()
- return schema.dump(user)
-
- def post(self):
- schema = UserSchema()
- user = schema.load(request.json)
- db.session.add(user)
- db.session.commit()
- return schema.dump(user), 201
-
- def put(self, user_id):
- user = User.query.get_or_404(user_id)
- schema = UserSchema(partial=True)
- updated_user = schema.load(request.json, instance=user)
- db.session.commit()
- return schema.dump(updated_user)
-
- def delete(self, user_id):
- user = User.query.get_or_404(user_id)
- db.session.delete(user)
- db.session.commit()
- return '', 204
In app.py:
- from flask import Flask
- from flask_restful import Api
- from flask_migrate import Migrate
- from models import db
- from views import UserResource
- from flask_apispec import FlaskApiSpec
- from flask_apispec.extension import FlaskApiSpec
-
- app = Flask(__name__)
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
- db.init_app(app)
- migrate = Migrate(app, db)
- api = Api(app)
-
- api.add_resource(UserResource, '/users/<int:user_id>')
-
- docs = FlaskApiSpec(app)
- docs.register(UserResource)
-
- if __name__ == '__main__':
- app.run()
Starten Sie die Anwendung, indem Sie den folgenden Befehl ausführen:
python app.py
1. Halten Sie Dokumentation und Code synchron
Stellen Sie sicher, dass die Dokumentation immer mit dem Code synchronisiert ist, um Inkonsistenzen zwischen der Dokumentation und der tatsächlichen API zu vermeiden. Sie können CI/CD-Tools verwenden, um Dokumentation automatisch zu generieren und bereitzustellen.
2. Verwenden Sie Anmerkungen und Dekoratoren
Durch die Verwendung von Kommentaren und Dekoratoren kann die Dokumentation prägnanter und lesbarer gestaltet werden. Verwenden Sie beispielsweise den @doc-Dekorator von Flask-Apispec, um Dokumentationsinformationen zu einer Ansichtsfunktion hinzuzufügen.
3. Definieren Sie globale Parameter und Reaktionen
Für häufig verwendete Parameter und Antworten können in Apispec globale Parameter und Antwortvorlagen definiert werden, um wiederholten Code zu reduzieren.
- spec.components.parameter("user_id", "path", schema={"type": "integer"}, required=True)
- spec.components.response("User", {
- "description": "A user object",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "id": {"type": "integer"},
- "name": {"type": "string"}
- }
- }
- }
- }
- })
4. Überprüfen und aktualisieren Sie die Dokumentation regelmäßig
Überprüfen und aktualisieren Sie die Dokumentation regelmäßig, um Richtigkeit und Vollständigkeit sicherzustellen. Dies kann durch die Einrichtung eines Dokumentenüberprüfungszyklus oder die Einführung eines Dokumentenüberprüfungsprozesses erreicht werden.
Weitere Funktionen und eine detaillierte Verwendung finden Sie in der offiziellen Dokumentation:
https://apispec.readthedocs.io/en/latest
Ich glaube, dass Sie durch diesen Artikel ein grundlegendes Verständnis und eine Beherrschung von Apispec erworben haben. Von der grundlegenden Verwendung über erweiterte Funktionen bis hin zu praktischen Fällen und Best Practices stellen wir umfassend vor, wie Sie Apispec zum Generieren und Verwalten von API-Dokumenten verwenden.
Ich hoffe, dass Sie dieses Wissen auf tatsächliche Projekte anwenden und Ihrer API einen Hauch von Helligkeit verleihen können.