API:Siteler arası talepler

This page is a translated version of the page API:Cross-site requests and the translation is 82% complete.
Outdated translations are marked like this.

If an external site needs to make an API call against a MediaWiki site, it must use CORS (preferred) or JSONP (older, less secure).

User scripts and gadgets within the same wiki-family (e.g. a script on the English Wikipedia needs to check image information on Commons) should use mediawiki.ForeignApi , which uses CORS under the hood.

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ğ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
İ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.

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.

Using JSONP weakens the security of your origin site because, as described above, API responses are executed as JavaScript code. If an attacker compromises the remote site, they can use their access to run arbitrary JavaScript code in your users' browsers, within the context of your site. It is recommended to use CORS instead.
Tüm JSONP istekleri, uzak vikide oturum açtıktan sonra bile, oturumu kapatılmış gibi (yani anonim kullanıcı olarak) işlenir.

Ö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
 */
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

Ayrıca bakınız