API:Seitenübergreifende Abfragen
![]() | Diese Seite ist Teil der Dokumentation der MediaWiki action API. |
Wenn ein Benutzerskript oder Gadget einen API-Aufruf für eine andere MediaWiki-Site ausführen muss (z. B. muss ein Skript in der englischen Wikipedia Bildinformationen in Commons überprüfen), muss es JSONP oder CORS anwenden.
Benutzung von JSONP
Die API format=json
nimmt einen callback
-Parameter an, der eine JavaScript-Funktion benennt, in das das JSON-Ergebnis eingebunden wird.
Das kann man einsetzen, um die API auf einer entfernten Seite aufzurufen, indem man dynamische <script>
-Tags zum Dokument hinzufügt.
Beispiel
GET-Anfrage
Holen Sie sich die Titel von drei zufälligen Seiten aus der englischen Wikipedia.
Beispielcode
var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";
/**
* Die Funktion, um das Ergebnis zusammenzufassen
*/
var callback = function (response) {
var pages = response.query.random; // Verarbeitet die Ausgabe, um die Titel zu erhalten
Object.keys(pages).forEach(function(key) {
console.log(pages[key].title);
});
};
var scriptTag = document.createElement("script"); // Erstellt dynamisch ein "Script"-Tag
scriptTag.src = apiEndpoint + "?" + params + "&callback=callback"; // Deutet auf die Abfrage-Zeichenkette
document.body.appendChild(scriptTag); // Fügt das Script-Tag zum Dokument hinzu
Antwort
Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province
Benutzung von CORS
Für die MediaWiki-API muss der origin
als Abfragezeichenfolgenparameter angegeben werden, wobei der Wert die Site ist, von der die Anforderung stammt, und mit dem vom CORS-Protokoll geforderten Origin-Header abgeglichen wird.
Beachte dass dieser Parameter in allen vorherigen Anfragen eingebunden werden muss und auch in den Teil der Abfrage-Strings der anfragenden URI, sogar bei POST-Anfragen.
Wenn der Parameter origin
geliefert wird und die Abfrage keine erfolgreiche CORS-Antwort ausgibt, wird MediaWiki≥1.30 einen MediaWiki-CORS-Rejection
-Header mit einer kurzen Begründung für das Fehlschlagen ausgeben, z.B. im Falle nicht übereinstimmender Ursprünge oder nicht unterstützter Header einen Access-Control-Request-Headers
-Abfrage-Header.
Nicht authentifizierte CORS-Anfragen
Nicht authentifizierte CORS-Abfragen können von jedem Ursprung aus gestellt werden, indem der Abfrage-Parameter origin
auf *
gesetzt wird. In diesem Fall setzt MediaWiki den Header Access-Control-Allow-Credentials: false
in die Antwort ein und fährt mit der Abfrage fort, als wäre sie unangemeldet gestellt worden.
Beispiel
GET-Anfrage
Holen Sie sich die Namen der ersten drei Bilder von Wikimedia Commons.
Beispielcode
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";
/**
* Senden Sie die Anfrage, um die Bilder zu erhalten
*/
fetch(apiEndpoint + "?" + params + "&origin=*")
.then(function(response){return response.json();})
.then(function(response) {
var allimages = response.query.allimages; // Verarbeiten Sie die Ausgabe, um die Bildnamen zu erhalten
Object.keys(allimages).forEach(function(key) {
console.log(allimages[key].name);
});
});
Antwort
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg
Authentifizierte CORS-Anfragen
Um eine authentifizierte CORS-Anfrage durchzuführen, muss $wgCrossSiteAJAXdomains
des entfernten Wikis so eingestellt sein, dass es die Herkunftsseite erlaubt.
Falls die CORS-Herkunftsübeprüfung durchläuft, wird MediaWiki den Access-Control-Allow-Credentials: true
-Header in die Antwort einbinden, sodass Authentifizierungs-Cookies gesendet werden können.
Handbuch:CORS enthält weitere Anleitungen und Beispiele zur Verwendung von CORS-Abfragen in JavaScript.
Zusätzliche Anmerkungen
- Detaillierte Unterschiede zwischen JSONP und CORS sind verfügbar auf CORS vs JSONP.