API:Požadavky napříč weby
Tato stránka je součástí dokumentace k API Action MediaWiki. |
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
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.
Příklad
Požadavek GET
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
*/
window.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