API:Seitenübergreifende Abfragen

From mediawiki.org
This page is a translated version of the page API:Cross-site requests and the translation is 89% 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 or JSONP.

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.

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

Zusätzliche Anmerkungen

  • Detaillierte Unterschiede zwischen JSONP und CORS sind verfügbar auf CORS vs JSONP.

Siehe auch