API:Siteler arası talepler

From mediawiki.org
This page is a translated version of the page API:Cross-site requests and the translation is 100% complete.

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.

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

Ayrıca bakınız