Jump to content
MediaWiki

API:Požadavky napříč weby

From mediawiki.org
This page is a translated version of the page API:Cross-site requests and the translation is 100% complete.
Tato stránka je součástí dokumentace k API Action MediaWiki.
Akce API MediaWiki
Základní informace
Přihlášení
Uživatelské účty a uživatelé
Operace spojené se stránkou
Vyhledávání
Nástroje pro vývojáře
Návody
v · d · u

Pokud externí web potřebuje provést volání API proti webu MediaWiki, musí použít CORS (preferováno) nebo JSONP (starší, méně bezpečné) .

Použití CORS

Viz též: Manual:CORS

Pokud je uživatelský skript nebo gadget použit k volání API proti webu v rámci stejné wiki rodiny , musí používat modul MediaWiki, který používá CORS pod háčkem: mediawiki.ForeignApi . To je způsob, jak postupovat například, pokud skript na anglické Wikipedii potřebuje zkontrolovat informace o obrázku na Commons. Zbytek této části je pro vývojáře, kteří nemohou používat mediawiki.ForeignApi.

MediaWiki API vyžaduje, aby byl jako parametr řetězce dotazu zadán origin nebo crossorigin. Pokud je požadavek CORS autentizován pomocí souborů cookie, hodnota origin musí být 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 JavaScriptu
varapiEndpoint="https://commons.wikimedia.org/w/api.php";
varparams="action=query&list=allimages&ailimit=3&format=json";
/**
 * Odešlete žádost o získání obrázků
 */
fetch(apiEndpoint+"?"+params+"&origin=*")
.then(function(response){returnresponse.json();})
.then(function(response){
varallimages=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

Chcete-li provést ověřený požadavek CORS pomocí souborů cookie, musí být nastavení $wgCrossSiteAJAXdomains vzdálené wiki nastaveno tak, aby umožňovalo zdrojový web, a parametr origin musí být nastaven na zdrojový web v URL požadavku. 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.

Ověřené požadavky CORS pomocí OAuth

Verze MediaWiki:
1.44
Gerrit change 1118583

Chcete-li odeslat ověřený požadavek CORS pomocí OAuth , získejte přístupový token OAuth pomocí normálního autorizačního postupu, poté proveďte požadavek s crossorigin= v URL požadavku (není nutná žádná hodnota) a Authorization: Bearer přístupový token v záhlaví požadavku.

Příručka: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.

Použití JSONP oslabuje zabezpečení vašeho původního webu, protože, jak je popsáno výše, odpovědi API se spouštějí jako kód JavaScriptu. Pokud útočník napadne vzdálený web, může využít svůj přístup ke spuštění libovolného kódu JavaScriptu v prohlížečích vašich uživatelů v kontextu vašeho webu. Místo toho se doporučuje použít CORS.
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 JavaScriptu

varapiEndpoint="https://en.wikipedia.org/w/api.php";
varparams="action=query&list=random&rnlimit=3&format=json";
/**
 * Funkce pro zabalení výsledku
 */
window.my_callback=function(response){
varpages=response.query.random;// Zpracujte výstup, abyste získali tituly
Object.keys(pages).forEach(function(key){
console.log(pages[key].title);
});
};
varscriptTag=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ěď

KacheAyeShoi
Talk:Sarbka,WągrowiecCounty
Category:NakhonRatchasimaProvince

Související odkazy

AltStyle によって変換されたページ (->オリジナル) /