API:Cross-site requests

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Cross-site requests and the translation is 72% complete.
Outdated translations are marked like this.
Other languages:
Afrikaans • ‎Deutsch • ‎Deutsch (Sie-Form)‎ • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎polski • ‎română • ‎русский • ‎ไทย • ‎中文 • ‎日本語 • ‎한국어

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.

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";

/**
 * The function to wrap the result
 */
var callback = function (response) {
    var pages = response.query.random; // Process the output to get the titles
    Object.keys(pages).forEach(function(key) {
        console.log(pages[key].title);
    });
};

var scriptTag = document.createElement("script"); // Dynamically create a "script" tag
scriptTag.src = apiEndpoint + "?" + params + "&callback=callback"; // Point to the query string

document.body.appendChild(scriptTag); // Add the script tag to the document

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.

When the origin parameter is supplied and the request does not return a successful CORS response, MediaWiki≥1.30 will return a MediaWiki-CORS-Rejection header with a brief reason for the failure, e.g. in case of mismatched origin or unsupported headers in a Access-Control-Request-Headers request header.

Nicht authentifizierte CORS-Anfragen

Unauthenticated CORS requests may be made from any origin by setting the origin request parameter to *. 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.

Siehe Manual: CORS für Anleitungen wie CORS-Abfragen in JavaScript gehandhabt werden.

Zusätzliche Anmerkungen

  • Detailed differences between JSONP and CORS are available at CORS vs JSONP.

Siehe auch