API:Seitenübergreifende Abfragen

This page is a translated version of the page API:Cross-site requests and the translation is 82% complete.
Outdated translations are marked like this.

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
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.

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.

Using JSONP weakens the security of your origin site because, as described above, API responses are executed as JavaScript code. If an attacker compromises the remote site, they can use their access to run arbitrary JavaScript code in your users' browsers, within the context of your site. It is recommended to use CORS instead.
Alle JSONP-Anfragen werden verarbeitet, als wären sie abgemeldet (d. h. als anonymer Benutzer), auch nachdem Du Dich beim Remote-Wiki angemeldet hast.

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
 */
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

Siehe auch