API:Seitenübergreifende Abfragen
Diese Seite ist Teil der Dokumentation der MediaWiki action API. |
If an external site needs to make an API call against a MediaWiki site, it must use CORS (preferred) or JSONP (older, less secure).
User scripts and gadgets within the same wiki-family (e.g. a script on the English Wikipedia needs to check image information on Commons) should use mediawiki.ForeignApi
, which uses CORS under the hood.
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 $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 $reqheaders-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 $code2 in die Antwort ein und fährt mit der Abfrage fort, als wäre sie unangemeldet gestellt worden.
In this case MediaWiki will include the Access-Control-Allow-Credentials: false
header in the response and will process the request as if logged out.
Beispiel
GET-Anfrage
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.
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
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
*/
window.my_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=my_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