API:Requêtes entre différents sites
![]() | Cette page fait partie de la documentation de l'API MediaWiki Action. |
Si un script utilisateur ou un gadget nécessite de faire un appel à l'API pour communiquer avec un autre site MediaWiki (par exemple un script sur la Wikipédia anglophone qui a besoin de vérifier les informations d'une image sur Commons), il doit utiliser JSONP ou CORS (en).
Utilisation de JSONP
L'API format=json
accepte un paramètre callback
dont la valeur est une fonction JavaScript dans laquelle la sortie JSON sera empaquetée.
Ceci peut-être utilisé pour appeler l'API sur un site distant en ajoutant des balises <script>
dynamiquement au document.
Exemple
Requête GET
récupérer les titres de trois pages au hasard de la Wikipedia anglophone.
Exemple de code
var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";
/**
* la fonction pour envelopper le résultat
*/
var callback = function (response) {
var pages = response.query.random; // traiter la sortie pour récupérer les titres
Object.keys(pages).forEach(function(key) {
console.log(pages[key].title);
});
};
var scriptTag = document.createElement("script"); // créer dynamiquement une balise "script"
scriptTag.src = apiEndpoint + "?" + params + "&callback=callback"; // chaîne de la requête
document.body.appendChild(scriptTag); // ajouter la balise 'script' au document
Réponse
Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province
Utilisation de CORS
L'API MediaWiki demande que origin
soit fourni comme paramètre de requête, dont la valeur est le nom du site qui émet la requête, et qui est comparée avec l'entête Origin nécessaire au protocole CORS.
Remarquez que ce paramètre doit être inclus dans chaque requête préparatoire et devrait donc être inclus dans la partie de chaîne de demande de la requête URI, même pour une requête de type POST.
Quand le paramètre origin
est fourni et que la requête ne renvoie pas de réponse CORS positive, MediaWiki (depuis la 1.30) renvoie un entête MediaWiki-CORS-Rejection
avec un bref motif d'échec, par exemple si l'origine ne correspond pas ou si un entête de la requête Access-Control-Request-Headers
n'est pas supporté .
Requêtes CORS non authentifiées
Les requêtes CORS non authentifiées peuvent être faites à partir d'une origine quelconque en positionnant le paramètre de requête origin
à *
. Dans ce cas MediaWiki va inclure l'entête Access-Control-Allow-Credentials: false
dans la réponse et va traiter la requête comme si l'utilisateur était déconnecté.
Exemple
Requête GET
Récupérer les noms des trois premières images de Wikimedia Commons.
Exemple de code
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";
/**
* envoyer la requête pour obtenir les images
*/
fetch(apiEndpoint + "?" + params + "&origin=*")
.then(function(response){return response.json();})
.then(function(response) {
var allimages = response.query.allimages; // traiter la sortie pour obtenir le nom des images
Object.keys(allimages).forEach(function(key) {
console.log(allimages[key].name);
});
});
Réponse
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg
Requêtes CORS authentifiées
Pour faire une requête CORS authentifiée, l'option $wgCrossSiteAJAXdomains
du wiki distant doit être renseignée de façon à ce que le site source soit accepté.
Si la source du CORS est acceptée, MediaWiki inclura l'entête Access-Control-Allow-Credentials: true
dans la réponse, de manière à ce que le cookie d'authentification puisse être envoyé.
Manuel:CORS/fr contient plus d'informations et d'exemples sur la manière de manipuler les requêtes CORS en JavaScript.
Notes supplémentaires
- Le détail des différences entre JSONP et CORS est disponible sur CORS vs JSONP.