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 31% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎dansk • ‎español • ‎français • ‎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.

Example

GET request

Get the titles of three random pages from English Wikipedia.

Sample code

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

Response

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.

Unauthenticated CORS Requests

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.

Example

GET request

Get the names of the first three images from Wikimedia Commons.

Sample code
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";

/**
 * Send the request to get the images
 */
fetch(apiEndpoint + "?" + params + "&origin=*")
    .then(function(response){return response.json();})
    .then(function(response) {
          var allimages = response.query.allimages; // Process the output to get the image names
          Object.keys(allimages).forEach(function(key) {
               console.log(allimages[key].name);
          });
     });
Response
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg

Authenticated CORS Requests

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.

Additional notes

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

Siehe auch