API:Siteler arası talepler
![]() | Bu sayfa MediaWiki Eylem API'si belgelerinin bir parçasıdır. |
Bir kullanıcı betiğin veya küçük aracın başka bir MediaWiki sitesine karşı API çağrısı yapması gerekiyorsa (ör. Vikipedi'deki bir betiğin Commons'ta görüntü bilgilerini kontrol etmesi gerekir), JSONP veya CORS kullanılmalıdır.
JSONP kullanımı
API'nin format=json
değeri, JSON sonucunun sarılacağı bir JavaScript işlevi olan callback
parametresini kabul eder.
Bu, belgeye dinamik olarak <script>
etiketleri ekleyerek uzak bir sitedeki API'yi çağırmak için kullanılabilir.
Örnek
GET isteği
İngilizce Vikipedi'den üç rastgele sayfanın başlığını alın.
Örnek kod
var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";
/**
* Sonucu sarma işlevi
*/
var callback = function (response) {
var pages = response.query.random; // Başlıkları almak için çıkışı işleyin
Object.keys(pages).forEach(function(key) {
console.log(pages[key].title);
});
};
var scriptTag = document.createElement("script"); // Dinamik olarak bir "script" etiketi oluşturun
scriptTag.src = apiEndpoint + "?" + params + "&callback=callback"; // Sorgu dizesinin üzerine gelin
document.body.appendChild(scriptTag); // Betik etiketini belgeye ekleyin
Yanıt
Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province
CORS kullanımı
MediaWiki API'sı, origin
öğesinin bir sorgu dizesi parametresi olarak sağlanmasını gerektirir; değer, isteğin kaynaklandığı sitedir ve CORS protokolünün gerektirdiği Origin üstbilgisiyle eşleşir.
Bu parametrenin herhangi bir uçuş öncesi isteğine dahil edilmesi gerektiğini ve bu nedenle POST istekleri için bile istek URI'sının sorgu dizesi bölümüne dahil edilmesi gerektiğini unutmayın.
origin
parametresi sağlandığında ve istek başarılı bir CORS yanıtı döndürmediğinde, MediaWiki≥1.30 başarısızlık için kısa bir nedenle birlikte bir $ret başlığı döndürür; Access-Control-Request-Headers
istek başlığında eşleşmeyen kaynak veya desteklenmeyen başlıklar olması durumundadır.
Doğrulanmamış CORS İstekleri
Doğrulanmamış CORS istekleri, origin
istek parametresi *
olarak ayarlanarak herhangi bir kaynaktan yapılabilir. Bu durumda, MediaWiki Access-Control-Allow-Credentials: false
üstbilgisini yanıta ekler ve isteği oturumu kapatmış gibi işler.
Örnek
GET isteği
İlk üç resminin isimlerini Wikimedia Commons'tan alın.
Örnek kod
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";
/**
* Resimleri almak için istek gönderin
*/
fetch(apiEndpoint + "?" + params + "&origin=*")
.then(function(response){return response.json();})
.then(function(response) {
var allimages = response.query.allimages; // Resim adlarını almak için çıkışı işleyin
Object.keys(allimages).forEach(function(key) {
console.log(allimages[key].name);
});
});
Yanıt
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg
Doğrulanmış CORS İstekleri
Doğrulanmış bir CORS isteği yapmak için, uzak vikinin $wgCrossSiteAJAXdomains
ayarının başlangıç sitesine izin verecek şekilde ayarlanması gerekir.
CORS başlangıç kontrolü başarılı olursa, MediaWiki yanıtta Access-Control-Allow-Credentials: true
başlığını içerecektir, bu nedenle kimlik doğrulama çerezleri gönderilebilir.
Manual:CORS , JavaScript'te CORS isteklerinin nasıl ele alınacağına ilişkin daha fazla talimat ve örnek içermektedir.
Ek notlar
- JSONP ve CORS arasındaki ayrıntılı farklar CORS ve JSONP adresinde mevcuttur.