API:Siteler arası talepler
Bu sayfa MediaWiki Eylem API'si belgelerinin bir parçasıdır. |
If an external site needs to make an API call against a MediaWiki site, it must use CORS (preferred) or JSONP (older, less secure).
CORS kullanımı
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.
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ğlanır ve istek başarılı bir CORS cevabını göndermezse, MediaWiki≥1.30 başarısızlığın kısa bir nedeni ile birlikte MediaWiki-CORS-Rejection
başlığı gönderir, örneğin eşleşmeyen bir köken veya desteklenmeyen başlıklar durumunda Access-Control-Request-Headers
istek başlığı.
Doğrulanmamış CORS İstekleri
Doğrulanmamış CORS istekleri, origin
istek parametresi *
olarak ayarlanarak herhangi bir kaynaktan yapılabilir. Bu durumda, MediaWiki $code2 üstbilgisini yanıta ekler ve isteği oturumu kapatmış gibi işler.
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.
Örnek
GET isteği
Ö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.
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
Ö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
*/
window.my_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=my_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