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.
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].
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.
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).
Dann werden Sie aufgefordert, den Dateinamen einzugeben. Geben Sie daher einen geeigneten Namen ein (oder get_test, wenn er sauber ist).
Da wir dieses Mal eine GET-Anfrage senden, wählen Sie "GET-Anfrage" unter "Anfrage hinzufügen" oben rechts (siehe Abbildung unten).
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.
Dann wird das Ausführungsergebnis unten angezeigt.
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.
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
--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