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).
Benutzung von CORS
If a user script or gadget is used to make an API call against a site within the same wiki family , it must use a MediaWiki module that uses CORS under the hood: mediawiki.ForeignApi
.
This is the way to go, for instance, if a script on the English Wikipedia needs to check image information on Commons.
The rest of this section is for developers who cannot use mediawiki.ForeignApi
.
Die MediaWiki API verlangt, dass origin
oder crossorigin
als Query-String-Parameter bereitgestellt werden.
If the CORS request is authenticated via cookies, the origin
value must be the site from which the request originates, which is matched against the Origin header required by the CORS protocol.
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 $CrossSiteAJAXdomains 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.
Authenticated CORS requests using OAuth
MediaWiki Version: | 1.44 Gerrit change 1118583 |
To make an authenticated CORS request using OAuth , obtain an OAuth access token using the normal authorization flow, then make the request with crossorigin=
in the request URL (no value necessary) and Authorization: Bearer access token
in the request headers.
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