[PYTHON] So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm

In diesem Artikel wird erläutert, wie das API-Dokument beim Erstellen einer API mit dem Django REST-Framework automatisch generiert wird (Erläuterung der Verwendung usw.).

Schritt 0: DRF (Django REST Framework)

Dieses Mal verwende ich ** Version: 3.10.3 **. Die neueste Version (September 2020) ist ** Version: 3.11.1 **.

Schritt 1: Installieren Sie zusätzliche Pakete

Installieren Sie die für die automatische API-Dokumentation erforderlichen Pakete.

pip install coreapi
pip install Pygments
pip install Markdown

Schritt 2: Definieren Sie eine Dokumentseite in urls.py

Für urls.py im App-Ordner, der die Basis der Django-App bildet

from rest_framework.documentation import include_docs_urls

So aktivieren Sie die Verwendung von "include_docs_urls ()".

Setzen Sie dann path (" docs / "...) in urls.py der Anwendung wie folgt.

...

from rest_framework.documentation import include_docs_urls

urlpatterns = [
    path("admin/", admin.site.urls),
    path("docs/", include_docs_urls(title='API Document')),
    ...

Wenn Sie jetzt auf / docs zugreifen (z. B. http: // localhost: 8000 / docs /), wird die API-Dokumentationsseite wie unten gezeigt angezeigt.

api1.JPG

** * Fehler Gegenmaßnahmen ** Wenn Sie die Dokumentenseite besuchen, hat das Objekt "autoschema" kein Attribut "get_link" django " Wenn der Fehler angezeigt wird,

In der Datei settingsts.py des Anwendungsordners wie folgt 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' Wird hinzugefügt werden.

...
REST_FRAMEWORK = {
    ...
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
}

Dies geschieht, wenn Sie DRF Version 3.10 oder höher verwenden.

(Referenz) Django REST Framework 3.10 https://www.django-rest-framework.org/community/3.10-announcement/

Schritt 3: Lesen des Dokumentbildschirms

Unten links auf dem Bildschirm befinden sich Menüs mit den Namen Authentifizierung und Quellcode.

[3.1] Sie können sich anmelden, indem Sie die Authentifizierung bereitstellen. Wenn Sie sich hier anmelden, können Sie die API von diesem Dokumentbildschirm aus aufrufen, während Sie angemeldet sind. (Wie Sie auf die API zugreifen, wird im späteren Abschnitt erläutert.)

[3.2] Der Quellcode verwendet Coreapi auf der rechten Seite des Bildschirms

Sie können den Implementierungscode für jede API anzeigen

api2.JPG

** * Fehler Gegenmaßnahmen ** Wenn Sie aus irgendeinem Grund zum normalen API-Bildschirm anstelle des Dokumentbildschirms wechseln und über den Django Admin-Bildschirm auf Dokumente zugreifen, während Sie einmal angemeldet sind, wird der Dokumentbildschirm angezeigt (Ursache unbekannt).

Schritt 3: Bereiten Sie die API-Beschreibung vor

Derzeit gibt es keine Erklärung für den Vorgang für jede API. (Da {id} in der URL nur zum Lesen verwendet wird, wird "id" automatisch als erforderlicher Parameter beschrieben.)

api3.JPG

Fügen Sie hier eine Beschreibung jeder API hinzu.

Wenn Sie einen Kommentar für die "ViewSet-Klasse" schreiben, die viewssets.ViewSet usw. in views.py der entsprechenden App erbt, wird dieser als Erläuterung der API in den Dokumenten wiedergegeben.

Zum Beispiel viewssets.ViewSet Da die API in jede Klassenklasse unterteilt ist, erstellen, abrufen, aktualisieren, teilweise aktualisieren, zerstören, Beschreiben Sie die API-Beschreibung für jede dieser Klassen.

Die Implementierung ist wie folgt.


class DatasetViewset(viewsets.ViewSet):
    """
    list:
Informationen für alle Datensätze abrufen.

    create:
Erstellen Sie neue Datensatz-Metainformationen.

    retrieve:
Holen Sie sich die Informationen des einzelnen Datensatzes, der von pk angegeben wird.
   
    """

    def list(self, request):
・ ・ ・

Anschließend wird die folgende Beschreibung zu den Dokumenten der API hinzugefügt.

api4.JPG

Wenn Sie die Erklärung der API beschreiben, wird am Ende dieses Artikels erläutert, welche Art von Inhalt beschrieben werden soll.

Schritt 4: Sie können die API aufrufen

Sie können die API von diesem Dokumentbildschirm aus aufrufen. Wenn Sie in der Mitte des obigen Bildschirms auf die grüne Schaltfläche "Interagieren" klicken, wird der Bildschirm zum Aufrufen der API angezeigt.

Dies ist für GET-Systeme in Ordnung, aber die Erstellungs- (POST) und PUT-Systeme sind derzeit unvollständig.

In der vorherigen Abbildung werden die zum Erstellen und Einfügen erforderlichen Parameter nicht beschrieben, was zur Erläuterung der API nicht ausreicht.

Selbst wenn ich beim Erstellen auf die Schaltfläche "Interagieren" klicke, wird der unten gezeigte Bildschirm angezeigt und ich kann die zu postenden Parameterwerte nicht schreiben.

api5.JPG

Es gibt verschiedene Möglichkeiten, die Erklärung dieses POST-Typs und der PUT-Typ-API vorzubereiten, damit Sie auf die POST-API zugreifen können.

Das Django REST Framework Schema ist die Erklärung. https://www.django-rest-framework.org/api-guide/schemas/

Ein einfacher Weg ist zu def get_serializer(self): Der Code von wird in der ViewSet-Klasse und für jede Methode beschrieben. Es ist eine Strategie, den in dieser Methode verwendeten Serializer zu beschreiben und umzuleiten.

class DatasetViewset(viewsets.ViewSet):
    """
    list:
Informationen für alle Datensätze abrufen.

    create:
Erstellen Sie neue Datensatz-Metainformationen.

    retrieve:
Holen Sie sich die Informationen des einzelnen Datensatzes, der von pk angegeben wird.
    """

    def get_serializer(self):
        """Für die API-Dokumentation"""
        if self.action is "create":
            return DatasetCreateInputSerializer()
        elif self.action is "update":
            return DatasetUpdateMetadataInputSerializer()

    def list(self, request):
・ ・ ・

Anschließend ändert sich der Dokumentbildschirm wie folgt.

api6.JPG

Die obige Abbildung ist etwas schwer zu erkennen, aber beim Erstellen und Aktualisieren sind die für jede API erforderlichen Parameter vorhanden.

Das Letzte, worüber Sie sich Sorgen machen müssen, ist, dass die Beschreibung der einzelnen Parameter keine Beschreibung enthält.

Um die Beschreibung zu beschreiben und die in dieser API verwendeten Argumente richtig zu erklären, gehen Sie zu models.py

name = models.CharField(blank=False, max_length=100, unique=True, help_text="Projektname")

Beschreiben Sie die Erklärung im Argument "help_text" wie in.

Wenn Sie in Serializers eine modellunabhängige Klasse erstellt haben. Serializer in Serializers beschreiben Sie diese im Argument "help_text" dieses Felds.

Der Dokumentbildschirm sieht dann wie folgt aus, und die Beschreibung jedes Parameters wird in die Beschreibung eingegeben, z. B. "Datensatzname".

api7.JPG

Und wenn es sich in diesem Zustand befindet (def get_serializer () wird in der ViewSet-Klasse beschrieben und der in dieser Methode verwendete Serializer wird für jede Methode angegeben),

Wenn Sie in der Mitte des Bildschirms auf die grüne Schaltfläche "Interagieren" klicken, wird der Bildschirm zum Aufrufen der API mit den angezeigten Argumenten angezeigt.

api8.JPG

Jetzt können Sie diese API POSTEN, indem Sie den Wert jedes Parameters eingeben, wenn Sie auf die API auf der linken Seite klicken und unten rechts auf "Anfrage senden" klicken.

Schritt 5: Was Sie in der API-Beschreibung beschreiben möchten

Abschließend werde ich erklären, was Sie in der Erklärung der API beschreiben sollen.

** Was wichtig ist, ist der mitfühlende Wunsch, eine API-Dokumentation zu erstellen, die aus Sicht des Benutzers, der die API verwendet, leicht zu verstehen und zu verstehen ist. ** ** **

Der Inhalt, den Sie beschreiben möchten, hängt stark davon ab, ob die API nur innerhalb des Systems und nur vom Entwicklungsteam verwendet wird oder ob die API nach außen offengelegt wird.

wie auch immer,

Ich will es.

Für andere Inhalte, die in der API beschrieben werden sollen

● Buch "Web API Design" https://www.amazon.co.jp/dp/4798167010/

● Googles API-Designhandbuch https://cloud.google.com/apis/design

● MS API Design Guide https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/api-design

● API-Stilbuch http://apistylebook.com/

Ich denke, es ist eine gute Idee, zu vergleichen, wie viel Sie mit Ihrem eigenen Team schreiben, unter Bezugnahme auf das oben Gesagte.

Auf diese Weise werden API-Dokumente mit dem Django REST Framework & POST automatisch über den Dokumentbildschirm generiert.


Bemerkungen

** 【Übermittlung von Informationen】 ** Zusätzlich zu den Eindrücken der Bücher, die ich lese, veröffentliche ich Artikel und Websites auf Twitter, die ich für IT / KI und Business / Management interessant finde. Wenn Sie Informationen zu diesen Feldern sammeln möchten, folgen Sie uns bitte ♪ (Es gibt viele Informationen aus Übersee)

Yutaro Ogawa @ISID_AI_team https://twitter.com/ISID_AI_team

** [Andere] ** Das von mir geleitete "AI Technology Department Development Team" sucht Mitglieder. Wenn Sie interessiert sind Diese Seite Danke ♪

** [Sokumen-Kun] ** Wenn Sie sich plötzlich bewerben möchten, haben wir ein ungezwungenes Interview mit "Sokumen-kun". Bitte benutzen Sie dies auch ♪ https://sokumenkun.com/2020/08/17/yutaro-ogawa/

[Haftungsausschluss] Der Inhalt dieses Artikels selbst ist die Meinung / Übermittlung des Autors, nicht die offizielle Meinung des Unternehmens, zu dem der Autor gehört.


Weitere Referenzen in diesem Artikel

Recommended Posts

So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
CRUD POST mit Nuxt & Django REST Framework
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
So erstellen Sie eine Rest-API in Django
Wenn Sie mit dem Django REST-Framework filtern möchten
So veröffentlichen Sie ein Ticket über die Shogun-API
Manchmal möchten Sie mit DRF (Django REST Framework) auf View information from Serializer zugreifen.
Django REST Framework mit Vue.js
Melden Sie sich mit dem Django Rest Framework an
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
Generieren Sie automatisch ein Modellbeziehungsdiagramm mit Django
Wie fange ich mit Django an?
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Erstellen Sie eine RESTful-API mit dem Django Rest Framework
CRUD GET mit Nuxt & Django REST Framework ②
Poste von einem anderen Konto mit Twitter API
CRUD GET mit Nuxt & Django REST Framework ①
So erstellen Sie eine Anwendung aus der Cloud mithilfe des Django-Webframeworks
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
So können Sie die Funktionen des Django Rest Frameworks in einer Datei ausprobieren
Lösung, wenn nicht gefunden, wird angezeigt, wenn die API von Django REST Framework von außen aufgerufen wird
CRUD PUT, DELETE mit Nuxt & Django REST Framework
Generieren und veröffentlichen Sie Dummy-Bilddaten mit Django
So entwickeln Sie eine Cart-App mit Django
So generieren Sie ein Python-Objekt aus JSON
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
So implementieren Sie "named_scope" von RubyOnRails mit Django
Django REST Framework Ein wenig nützlich zu wissen.
Implementierung der Authentifizierungsfunktion in Django REST Framework mit djoser
[Lernnotiz] So erstellen Sie eine Anwendung mit Django ~ Von der virtuellen Umgebung bis zum Pushing zu Github ~
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Weitere neue Benutzerauthentifizierungsmethoden mit Django REST Framework
So kratzen Sie Bilddaten von Flickr mit Python
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Verwendung des Azure Table-Speichers von Django (PTVS)
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Übergang zum Update-Bildschirm mit dem Django-Tag
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
Implementieren Sie hierarchische URLs mit drf-verschachtelten Routern im Django REST-Framework
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
Grundlagen des Django REST-Frameworks
Tipps zum Django Rest Framework
[Evangelion] Versuchen Sie, mit Deep Learning automatisch Asuka-ähnliche Linien zu erzeugen
Umgang mit statischen Dateien bei der Bereitstellung in der Produktion mit Django
So geben Sie ein Dokument im PDF-Format mit Sphinx aus
So überprüfen Sie das Verhalten von ORM mit einer Datei mit django
[Django] Wie man Eingabewerte im Voraus mit ModelForm angibt
So generieren Sie einen öffentlichen Schlüssel aus einem privaten SSH-Schlüssel
So melden Sie sich automatisch wie 1Password von der CLI an
So lösen Sie den CSRF-Schutz bei Verwendung von AngularJS mit Django
So generieren Sie eine Abfrage mit dem IN-Operator in Django
So nehmen Sie erste Einstellungen für die Django-Projekterstellung vor