API:Požadavky napříč weby

This page is a translated version of the page API:Cross-site requests and the translation is 100% complete.

Pokud externí web potřebuje provést volání API proti webu MediaWiki, musí použít CORS nebo JSONP.

Uživatelské skripty a miniaplikace v rámci stejné wiki-rodiny (např. skript na anglické Wikipedii potřebuje zkontrolovat informace o obrázku na Commons) by měly používat mediawiki.ForeignApi , který používá CORS pod krytem.

Použití CORS

MediaWiki API vyžaduje, aby byl origin zadán jako parametr řetězce dotazu, přičemž hodnotou je stránka, ze které požadavek pochází, což je porovnáno s hlavičkou Origin vyžadovanou protokolem CORS. Všimněte si, že tento parametr musí být zahrnut v každém pre-flight požadavku, a proto by měl být zahrnut v části řetězce dotazu v identifikátoru URI požadavku i pro požadavky POST.

Když je zadán parametr origin a požadavek nevrátí úspěšnou odpověď CORS, MediaWiki≥1.30 vrátí hlavičku MediaWiki-CORS-Rejection se stručným důvodem selhání, např. v případě neshodného původu nebo nepodporovaných hlaviček v hlavičce požadavku Access-Control-Request-Headers.

Neověřené požadavky CORS

Neautentizované požadavky CORS mohou být provedeny z libovolného zdroje nastavením parametru požadavku origin na *. V tomto případě MediaWiki zahrne do odpovědi hlavičku Access-Control-Allow-Credentials: false a zpracuje požadavek, jako by byl odhlášen.

Příklad

Požadavek GET

Získejte jména prvních tří obrázků z Wikimedia Commons.


Ukázkový kód
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";

/**
 * Odešlete žádost o získání obrázků
 */
fetch(apiEndpoint + "?" + params + "&origin=*")
    .then(function(response){return response.json();})
    .then(function(response) {
          var allimages = response.query.allimages; // Zpracujte výstup, abyste získali názvy obrázků
          Object.keys(allimages).forEach(function(key) {
               console.log(allimages[key].name);
          });
     });

Odpověď

!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg

Ověřené požadavky CORS

Chcete-li provést ověřený požadavek CORS, musí být nastavení $wgCrossSiteAJAXdomains vzdálené wiki nastaveno tak, aby umožňovalo původní web. Pokud kontrola původu CORS projde, MediaWiki zahrne do odpovědi hlavičku Access-Control-Allow-Credentials: true, takže mohou být odeslány ověřovací soubory cookie.

Manual:CORS obsahuje další pokyny a příklady, jak zpracovat požadavky CORS v JavaScriptu.

Použití JSONP

format=json API přijímá parametr callback, jehož hodnotou je funkce JavaScriptu, do které bude zabalen výsledek JSON. To lze použít k volání rozhraní API na vzdáleném webu dynamickým přidáním značek ‎<script> do dokumentu.

Jakékoli požadavky JSONP budou zpracovány, jako byste byli odhlášeni (tj. jako anonymní uživatel), a to i po přihlášení na vzdálenou wiki.

Příklad

Požadavek GET

Získejte názvy tří náhodných stránek z anglické Wikipedie.


Ukázkový kód

var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";

/**
 * Funkce pro zabalení výsledku
 */
var my_callback = function (response) {
    var pages = response.query.random; // Zpracujte výstup, abyste získali tituly
    Object.keys(pages).forEach(function(key) {
        console.log(pages[key].title);
    });
};

var scriptTag = document.createElement("script"); // Dynamicky vytvořte značku "script".
scriptTag.src = apiEndpoint + "?" + params + "&callback=my_callback"; // Ukažte na řetězec dotazu

document.body.appendChild(scriptTag); // Přidejte do dokumentu značku skriptu

Odpověď

Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province

Další poznámky

Související odkazy