Es gab eine Zeit, als XMLHttpRequest
verwendet wurde, um API-Anfragen zu erstellen. Es enthielt keine Promises und sorgte nicht für einen sauberen JavaScript-Code. Mit jQuery verwendeten Sie die saubere Syntax mit jQuery.ajax()
.
Jetzt verfügt JavaScript über eine eigene integrierte Möglichkeit, API-Anfragen zu erstellen. Dies ist die Fetch-API, ein neuer Standard, um Serveranfragen mit Promises zu erstellen, der aber noch viele andere Funktionen enthält.
In diesem Tutorial erstellen Sie mit der Fetch-API sowohl GET- als auch POST-Anfragen.
Um dieses Tutorial zu absolvieren, benötigen Sie Folgendes:
Um die Fetch-API zu verwenden, rufen Sie die Methode fetch
auf, die die URL der API als Parameter akzeptiert:
fetch(url)
Fügen Sie nach der Methode fetch()
die Promise-Methode then()
ein:
.then(function() {
})
Die Methode fetch()
gibt ein Promise zurück. Wenn das zurückgegebene Promise resolve
ist, wird die Funktion innerhalb der Methode then()
ausgeführt. Diese Funktion enthält den Code für die Handhabung der von der API empfangenen Daten.
Fügen Sie unter der Methode then()
die Methode catch()
ein:
.catch(function() {
});
Die API, die Sie mit fetch()
aufrufen, kann außer Betrieb sein oder es können andere Fehler auftreten. Wenn dies geschieht, wird das Promise reject
zurückgegeben. Die Methode catch
wird verwendet, um reject
zu handhaben. Der Code innerhalb von catch()
wird ausgeführt, wenn ein Fehler beim Aufruf der API Ihrer Wahl auftritt.
Zusammengefasst sieht die Verwendung der Fetch-API wie folgt aus:
fetch(url)
.then(function() {
})
.catch(function() {
});
Mit einem Verständnis der Syntax zur Verwendung der Fetch-API können Sie nun mit der Verwendung von fetch()
für eine echte API fortfahren.
Die folgenden Codebeispiele basieren auf der Random User API. Mithilfe der API erhalten Sie zehn Benutzer und zeigen sie auf der Seite mit Vanilla JavaScript an.
Die Idee ist, alle Daten von der Random User API zu erhalten und in Listenelementen innerhalb der Liste des Autors anzuzeigen. Beginnen Sie mit der Erstellung einer HTML-Datei und dem Hinzufügen einer Überschrift und einer ungeordneten Liste mit der id
der authors
:
<h1>Authors</h1>
<ul id="authors"></ul>
Fügen Sie nun script
-Tags am Ende Ihrer HTML-Datei und verwenden Sie einen DOM-Selektor zum Ergreifen von ul
. Verwenden Sie getElementById
mit authors
als Argument. Denken Sie daran: authors
ist die id
für die zuvor erstellte ul
:
<script>
const ul = document.getElementById('authors');
</script>
Erstellen Sie eine konstante Variable namens url
, die die API enthält, die zehn zufällige Benutzer zurückgibt:
const url = 'https://randomuser.me/api/?results=10';
Mit erstellten ul
und url
ist es an der Zeit, die Funktionen zu erstellen, die zur Erstellung der Listenelemente verwendet werden. Erstellen Sie eine Funktion namens createNode
, die einen Parameter namens element
aufnimmt:
function createNode(element) {
}
Wenn createNode
später aufgerufen wird, müssen Sie den Namen eines tatsächlichen HTML-Elements übergeben, das erstellt werden soll.
Fügen Sie innerhalb der Funktion eine Anweisung return
hinzu, die element
unter Verwendung von document.createElement()
zurückgibt:
function createNode(element) {
return document.createElement(element);
}
Sie müssen auch eine Funktion namens append
erstellen, die zwei Parameter aufnimmt: parent
und el
:
function append(parent, el) {
}
Diese Funktion fügt el
an parent
mit document.createElement
an:
function append(parent, el) {
return parent.appendChild(el);
}
Sowohl createNode
als auch append
sind einsatzbereit. Rufen Sie nun mit der Fetch-API die Random User API unter Verwendung von fetch()
mit url
als Argument auf:
fetch(url)
fetch(url)
.then(function(data) {
})
})
.catch(function(error) {
});
Im obigen Code rufen Sie die Fetch-API auf, und übergeben die URL an die Random User API. Dann wird eine Antwort empfangen. Die Antwort, die Sie erhalten, ist jedoch nicht JSON, sondern ein Objekt mit einer Reihe von Methoden, die je nachdem, was Sie mit den Informationen tun möchten, verwendet werden können. Um das zurückgegebene Objekt in JSON zu konvertieren, verwenden Sie die Methode json()
.
Fügen Sie die Methode then()
hinzu, die eine Funktion mit einem Parameter namens resp
enthält:
fetch(url)
.then((resp) => )
Der Parameter resp
nimmt den Wert des von fetch(url)
zurückgegebenen Objekts an. Verwenden Sie die Methode json()
, um resp
in JSON-Daten zu konvertieren:
fetch(url)
.then((resp) => resp.json())
Die JSON-Daten müssen noch verarbeitet werden. Fügen Sie eine weitere Anweisung then()
mit einer Funktion hinzu, die ein Argument namens data
aufweist:
.then(function(data) {
})
})
Erstellen Sie innerhalb dieser Funktion eine Variable namens authors
, die gleich data.results
gesetzt wird:
.then(function(data) {
let authors = data.results;
Sie sollten für jeden Autor in authors
ein Listenelement erstellen, das ein Bild und den Namen des Autors anzeigt. Dafür eignet sich die Methode map()
hervorragend:
let authors = data.results;
return authors.map(function(author) {
})
Erstellen Sie innerhalb Ihrer Funktion map
eine Variable namens li
, die gleich createNode
mit li
(dem HTML-Element) als Argument gesetzt wird:
return authors.map(function(author) {
let li = createNode('li');
})
Wiederholen Sie dies, um ein Element span
und ein Element img
zu erstellen:
let li = createNode('li');
let img = createNode('img');
let span = createNode('span');
Die API bietet einen Namen für den Autor und ein Bild, das zu diesem Namen gehört. Setzen Sie img.src
auf das Bild des Autors:
let img = createNode('img');
let span = createNode('span');
img.src = author.picture.medium;
Das Element span
sollte den Vor- und Nachnamen des author
enthalten. Mit der Eigenschaft innerHTML
und der String-Interpolation können Sie dies tun:
img.src = author.picture.medium;
span.innerHTML = `${author.name.first} ${author.name.last}`;
Mit dem Bild und dem Listenelement, die zusammen mit dem Element span
erstellt wurden, können Sie die zuvor erstellte Funktion append
verwenden, um diese Elemente auf der Seite anzuzeigen:
append(li, img);
append(li, span);
append(ul, li);
Da beide Funktionen then()
abgeschlossen sind, können Sie nun die Funktion catch()
hinzufügen. Diese Funktion protokolliert den potenziellen Fehler auf der Konsole:
.catch(function(error) {
console.log(error);
});
Dies ist der vollständige Code der von Ihnen erstellten Anfrage:
function createNode(element) {
return document.createElement(element);
}
function append(parent, el) {
return parent.appendChild(el);
}
const ul = document.getElementById('authors');
const url = 'https://randomuser.me/api/?results=10';
fetch(url)
.then((resp) => resp.json())
.then(function(data) {
let authors = data.results;
return authors.map(function(author) {
let li = createNode('li');
let img = createNode('img');
let span = createNode('span');
img.src = author.picture.medium;
span.innerHTML = `${author.name.first} ${author.name.last}`;
append(li, img);
append(li, span);
append(ul, li);
})
})
.catch(function(error) {
console.log(error);
});
Sie haben gerade erfolgreich eine GET-Anfrage mit der Random User API und der Fetch-API durchgeführt. Im nächsten Schritt lernen Sie, wie Sie POST-Anfragen ausführen.
Fetch ist standardmäßig auf GET-Anfragen eingestellt, doch Sie können auch alle anderen Arten von Anfragen verwenden, die Kopfzeilen ändern und Daten senden. Dazu müssen Sie Ihr Objekt festlegen und als zweites Argument der Funktion fetch übergeben.
Erstellen Sie vor der Erstellung einer POST-Anfrage die Daten, die Sie an die API senden möchten. Dies wird ein Objekt namens data
mit dem Schlüssel name
und dem Wert Sammy
(oder Ihrem Namen) sein:
const url = 'https://randomuser.me/api';
let data = {
name: 'Sammy'
}
Stellen Sie sicher, dass Sie eine konstante Variable einfügen, die den Link der Random User API enthält.
Da es sich um eine POST-Anfrage handelt, müssen Sie dies explizit angeben. Erstellen Sie ein Objekt namens fetchData
:
let fetchData = {
}
Dieses Objekt muss drei Schlüssel enthalten: method
, body
und headers
. Der Schlüssel method
sollte den Wert 'POST'
haben. body
sollte gleich dem gerade erstellten Objekt data
gesetzt werden. headers
sollte den Wert von new Headers()
haben:
let fetchData = {
method: 'POST',
body: data,
headers: new Headers()
}
Die Schnittstelle Headers
ist eine Eigenschaft der Fetch-API, mit der Sie verschiedene Aktionen für HTTP-Anfragen und Antwort-Header durchführen können. Wenn Sie mehr darüber erfahren möchten, finden Sie in diesem Artikel namens Definieren von Routen und HTTP-Anfragemethoden in Express weitere Informationen.
Mit diesem Code kann die POST-Anfrage unter Verwendung der Fetch-API erstellt werden. Sie schließen url
und fetchData
als Argumente für Ihre POST-Anfrage fetch
ein:
fetch(url, fetchData)
Die Funktion then()
enthält Code, der die vom Random User API-Server empfangene Antwort verarbeitet:
fetch(url, fetchData)
.then(function() {
// Handle response you get from the server
});
Es gibt auch eine andere Möglichkeit zur Erstellung eines Objekts und der Verwendung der Funktion fetch()
. Anstatt ein Objekt wie fetchData
zu erstellen, können Sie den Anfragekonstruktor verwenden, um Ihr Anfrageobjekt zu erstellen. Erstellen Sie dazu eine Variable namens request
:
const url = 'https://randomuser.me/api';
let data = {
name: 'Sara'
}
var request =
Die Variable request
sollte gleich new Request
gesetzt werden. Das Konstrukt new Request
nimmt zwei Argumente an: die API-URL (url
) und ein Objekt. Das Objekt sollte auch die Schlüssel method
, body
und headers
enthalten, genau wie fetchData
:
var request = new Request(url, {
method: 'POST',
body: data,
headers: new Headers()
});
Jetzt kann request
als einziges Argument für fetch()
verwendet werden, da es auch die API-URL enthält:
fetch(request)
.then(function() {
// Handle response we get from the API
})
Insgesamt sieht Ihr Code wie folgt aus:
const url = 'https://randomuser.me/api';
let data = {
name: 'Sara'
}
var request = new Request(url, {
method: 'POST',
body: data,
headers: new Headers()
});
fetch(request)
.then(function() {
// Handle response we get from the API
})
Jetzt kennen Sie zwei Methoden zur Erstellung und Ausführung von POST-Anfragen mit der Fetch-API.
Obwohl die Fetch-API noch nicht von allen Browsern unterstützt wird, ist sie eine gute Alternative zu XMLHttpRequest. Wenn Sie lernen möchten, wie Sie Web-APIs mit React aufrufen, lesen Sie diesen Artikel zu diesem Thema.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!