Kurs zur Erstellung von Webanwendungen, der mit Flask of Python Teil 2 Kapitel 1 ~ JSON-Austausch ~ gelernt wurde

Was ist eine Web-API?

Ab diesem Zeitpunkt wird es die Web-API-Edition sein. Bisher haben wir Webanwendungen unter der Annahme erstellt, dass Benutzer sie mit einem Browser durchsuchen und bedienen. In der heutigen Zeit ist die Verwendung von anderen Anwendungen als Browsern, wie z. B. Smartphone-Apps, jedoch weit verbreitet. Neben der offiziellen App ist es denkbar, dass die Funktion für die Öffentlichkeit zugänglich ist und vom Programm genutzt wird. In einem solchen Fall ist die Web-API die Schnittstelle zwischen der Webanwendung und dem Programm gemäß bestimmten Regeln, dh die Schnittstelle zwischen der Webanwendung und dem Programm. Es ist auch möglich, eine Webanwendung aus einer clientseitigen Anwendung mithilfe der Web-API zu erstellen, selbst in einer normalen Webanwendung. In diesem Fall werden die serverseitige Funktion und die clientseitige Funktion getrennt, um die Sichtbarkeit des Programms zu verbessern.

Was ist JSON?

Bisher wurde der Prozess der Rückgabe von HTML als Antwort auf eine Anfrage durchgeführt. HTML ist im Allgemeinen so konzipiert, dass es in einem Browser angezeigt und von einer Person bedient wird. Daher ist es möglich, HTML mit WebAPI zu verwenden, aber es ist oft mühsam und ineffizient, es programmgesteuert zu verwenden. Daher verwenden viele [^ 1] Web-APIs häufig ein Format namens JSON (JavaScript Object Notation). Das genaue Format von JSON ist in RFC 8259 definiert. Grundsätzlich können Sie die Zahlen und Zeichenfolgen in Python, Bool-Werte (true, false), Listen, die Nullen enthalten können, und Wörterbücher verstehen. Der Schreibstil ist fast der gleiche. Ein Beispiel für json ist unten gezeigt.

{
"id": 3,
"name": "hoge",
"ref": [1, 2, 4],
}

In diesem Beispiel ist die ID der Schlüssel, der numerische Wert ist 3, der Name ist der Zeichenketten-Hoge und der "ref" ist das Array [1, 2, 3].

JSON zurückgeben

Gehen Sie wie folgt vor, um den JSON mit dem obigen Inhalt von Flask zurückzugeben.

from flask import Flask, jsonify

app = Flask(__name__)

#Japanisch sprechen können
app.config['JSON_AS_ASCII'] = False

books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}]


@app.route('/')
def get_json():
    data = {
        "id": 3,
        "name": "hoge",
        "ref": [1, 2, 4],
    }
    return jsonify(data)


if __name__ == '__main__':
    app.run()

Als allererstes

app.config['JSON_AS_ASCII'] = False

Ich habe es möglich gemacht, Japanisch in JSON zu verwenden (diesmal spielt es keine Rolle, aber es ist besser, es einzuschließen). Erstellen Sie als Nächstes das zurückzugebende Objekt.

    data = {
        "id": 3,
        "name": "hoge",
        "ref": [1, 2, 4],
    }

Es verwendet Python-Wörterbücher und -Listen.

Diese Daten werden dann in json konvertiert und zurückgegeben.

return jsonify(data)

Verwenden Sie dazu die jsonify-Funktion.

Um das Obige zusammenzufassen, können Sie JSON mit einem normalen Python-Wörterbuch und einer normalen Python-Liste ausdrücken und mithilfe der Funktion jsonify tatsächlich in JSON konvertieren.

So debuggen Sie die Web-API von PyCharm

Bisher habe ich Webseiten über einen Browser überprüft und debuggt. Beim Debuggen der Web-API ist es jedoch praktisch, über PyCharm oder ähnliches debuggen zu können. Speziell für POST haben wir früher Formulare verwendet, aber im Fall der Web-API ist es schwierig, über den Browser zu arbeiten, da POST direkt ausgeführt wird. PyCharm (Professional-Version) verfügt über eine Funktion (HTTP-Client) zum Erstellen und Senden von HTTP-Anforderungen auf PyCharm. Ich werde seine Funktion vorstellen. Sie können dies wahrscheinlich mit anderen IDEs als PyCharm tun. Sie können auch ein Tool namens cURL verwenden. Wenn Sie etwas anderes als PyCharm verwenden, überprüfen Sie es bitte.

Der HTTP-Client von PyCharm bietet zwei Möglichkeiten: Die eine besteht darin, eine Ad-hoc-HTTP-Anforderung zu senden, und die andere darin, die HTTP-Anforderung in einer Datei zu speichern und zu senden. Dieses Mal werde ich vorstellen, wie eine wiederverwendbare HTTP-Anforderung in einer Datei gespeichert wird.

Wählen Sie zunächst im Menü Datei die Option Neu und klicken Sie auf HTTP-Anforderung (siehe Abbildung unten). スクリーンショット 2020-02-12 18.12.58.png

Dann werden Sie aufgefordert, den Dateinamen einzugeben. Geben Sie daher einen geeigneten Namen ein (oder get_test, wenn er sauber ist). スクリーンショット 2020-02-12 18.13.36.png

Da wir dieses Mal eine GET-Anfrage senden, wählen Sie "GET-Anfrage" unter "Anfrage hinzufügen" oben rechts (siehe Abbildung unten). スクリーンショット 2020-02-12 18.14.03.png

Dadurch wird die GET-Anforderungsvorlage eingefügt. Schreiben Sie die eingefügte Vorlage entsprechend dieser Zeit wie folgt um.

GET http://localhost:5000/
Accept: application/json

###

Die Bedeutung davon ist zuerst

GET http://localhost:5000/

Gibt an, dass eine GET-Anforderung an "http: // localhost: 5000 /" gesendet wird.

Accept: application/json

Gibt an, dass der zu sendende Inhaltstyp "application / json" ist (da es sich um eine feste Phrase handelt, müssen Sie sich nicht zu viele Sorgen machen).

###

Zeigt den Anforderungsbegrenzer an, wenn mehrere HTTP-Anforderungen in der HTTP-Client-spezifischen Notation von PyCharm geschrieben werden. Es gibt viele andere Dinge, die ich schreiben kann, aber das ist das Minimum. Andere Funktionen folgen grundsätzlich der HTTP-Header-Syntax. Ich möchte, dass Sie jeden überprüfen.

Als nächstes senden wir diese Anfrage tatsächlich. Führen Sie zunächst das Beispielprogramm aus. Danach können Sie die Anfrage senden, indem Sie zu HTTPClient zurückkehren und im Editor auf das grüne ▶ (siehe unten) links neben GET klicken. スクリーンショット 2020-02-12 18.15.12.png

Dann wird das Ausführungsergebnis unten angezeigt.

Erhalten Sie JSON auf POST-Anfrage

Bis zu diesem Punkt wurde der Vorgang des Zurücksendens von JSON an die GET-Anforderung durchgeführt. Als nächstes werde ich den Prozess des Empfangs einer POST-Anfrage und den darin enthaltenen JSON vorstellen.

Das Hauptprogramm (app.py) lautet wie folgt.

from flask import Flask, request, jsonify

app = Flask(__name__)

#Japanisch sprechen können
app.config['JSON_AS_ASCII'] = False

books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}]


@app.route('/books', methods=['POST'])
def post_json():
    #Erhalte JSON
    json = request.get_json()

    #JSON analysieren
    name = json['name']
    price = json['price']
    book = {'name': name, 'price': price}
    book_id = len(books)
    books.append(book)

    #Erstellen Sie ein Rückgabewörterbuch
    book['id'] = book_id
    return jsonify(book)  #Antwort JSON


@app.route('/books/<book_id>', methods=['GET'])
def get_json_from_dictionary(book_id):
    return jsonify(books[int(book_id)])


if __name__ == '__main__':
    app.run()

Eine Beispielanfrage finden Sie unten.

POST http://localhost:5000/books
Content-Type: application/json

{
  "name": "hoge",
  "price": 1000
}

###

GET http://localhost:5000/books/2
Content-Type: application/json

###

Nach Erhalt der POST-Anforderung können Sie JSON mithilfe von get_json wie unten gezeigt in ein Python-Objekt konvertieren.

request.get_json()

Das von get_json konvertierte Objekt kann wie ein Python-Wörterbuch oder eine Python-Liste behandelt werden (der folgende Teil).

    #JSON analysieren
    name = json['name']
    price = json['price']

Sie können auch URLs definieren, die denselben Namen haben, aber unterschiedliche HTTP-Methoden haben (GET und POST hier), die bisher nicht erläutert wurden. Web-APIs (insbesondere solche, die als REST-APIs bezeichnet werden) tun dies häufig. Dies macht deutlich, dass Sie es im Fall von GET erhalten und im Fall von POST senden.

Problem

In dem Problem von Teil 1, Kapitel 5, haben wir das Bestandsverwaltungssystem für Produkte betrachtet. Ich möchte diese Funktion als Web-API implementieren. Implementieren Sie eine Web-API zum Hinzufügen / Löschen / Erfassen von Produkten. Verwenden Sie DB. Dieses Mal gibt es aufgrund der Anleitung fast den gleichen Teil wie das Problem in Teil 1, Kapitel 5. Sie können die Antwort umleiten.

-Erstellen Sie eine Tabelle mit (Produkt-ID, Produktname, Preis) als Spalte

Entwicklung

--Erstellen Sie eine Produktänderungs-API (/ api / 1.0 / items / id). Verwenden Sie die PUT-Methode, da es sich um ein Update handelt. --Erstellen Sie eine Produktlöschseite (/ api / 1.0 / items / id). Verwenden Sie die DELETE-Methode, da es sich um eine Löschung handelt.

[^ 1]: "Viele", nicht alle. In der Vergangenheit wurde ein Format namens XML verwendet, das in der Nähe von HTML liegt. Kürzlich wurde auch ein Protokoll namens gRPC veröffentlicht, das eine schnellere Kommunikation ermöglicht.

Recommended Posts

Kurs zur Erstellung von Webanwendungen, der mit Flask of Python Teil 2 Kapitel 1 ~ JSON-Austausch ~ gelernt wurde
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Entwicklung von Webanwendungen mit Flask
Anwendungsentwicklung mit Docker + Python + Flask
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Webanwendung mit Python + Flask (unter Verwendung von VScode) # 1 - Aufbau einer virtuellen Umgebung-
Python x Flask x PyTorch Einfacher Aufbau einer Webanwendung zur Nummernerkennung
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
[Python] Eine schnelle Webanwendung mit Bottle!
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)
Einfache Web-App mit Python + Flask + Heroku
1. Mit Python 1-3 gelernte Statistiken. Berechnung verschiedener Statistiken (Statistiken)
Führen Sie eine Python-Webanwendung mit Docker aus
Datenerfassung von der Analytics-API mit dem Google API-Client für die Python Part 2-Webanwendung
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
1. Mit Python 1-2 gelernte Statistiken. Berechnung verschiedener Statistiken (Numpy)
Starten Sie einen Webserver mit Python und Flask
Lernen Sie langsam mit Python "Prinzip der Abhängigkeitsumkehr"
[Teil 3] Crawlen mit Python! Es ist eher JSON als CSV! ??
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Mit Python erlernte Derivate- (1) Berechnung des Devisenterminkurses-
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Erstellen von BINGO "Web Tools" mit Python (Inhaltsverzeichnis)
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Grundlagen der modernen mathematischen Statistik mit Python] Kapitel 1: Wahrscheinlichkeit
Hobby Web Engineer entwickelt Webanwendung mit Vue.js + Flask (& GCP)
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Python] Verwenden Sie JSON mit Python
Anwendung von Python 3 vars
Programmieren mit Python Flask
Python x Flask x Tensorflow.Keras Web-App, die Katzenrassen vorhersagt 2
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!
[CleanArchitecture with Python] Teil 2: Frameworks & Drivers Layer: Die Entstehung des Web
Webanwendung mit Python3.3.1 + Flasche (1) - Ändern Sie die Vorlagen-Engine in jinja2
1. Mit Python gelernte Statistiken 2. Wahrscheinlichkeitsverteilung [Gründliches Verständnis von scipy.stats]
Beispiel für das Parsen von HTTP GET und JSON mit Pfefferpython
Leicht verständliche Erklärung der Python-Webanwendung (Django) auch für Anfänger (5) [Einführung in den DB-Betrieb mit Django-Shell]
Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen