API:Cross-site requests/fr

Category:MediaWiki action API/fr

Si un site externe doit faire un appel à l'API d'un site MediaWiki, il doit utiliser CORS (de preférence) ou JSONP (plus ancien et moins sécurisé).

Utilisation de CORS

Voir aussi : Manual:CORS

Si un script utilisateur ou un gadget est utilisé pour faire un appel à l'API vers un site qui appartient à la même famille de wikis, il doit utiliser un module MediaWiki qui fait appel à CORS sous l'accroche : mediawiki.ForeignApi. C'est ce principe qui est utilsé par exemple quand un script de la Wikipedia anglophone doit vérifier les informations d'une image de Commons. Le reste de cette section concerne les développeurs qui ne peuvent pas utiliser mediawiki.ForeignApi.

L'API MediaWiki demande que origin ou crossorigin soient fournis comme paramètre du texte de la requête. Si la requête CORS est authentifiée par le biais de cookies, la valeur de origin doit être le nom du site qui émet la requête, et qui est comparée avec l'entête Origin nécessaire au protocole CORS. Notez que ces paramètres doivent être inclus dans chaque requête de pré-vérification et doivent donc figurer dans la partie du texte de la requête, de l'URI adressée, même pour les requêtes 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 affectant * au 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 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 Javascript
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 utilisant les cookies

Pour faire une requête CORS authentifiée en utilisant les cookies, l'option $wgCrossSiteAJAXdomains du wiki distant doit être activée de façon à ce que le site source soit accepté, et le paramètre origin doit comporter le site d'origine dans l'URL de la requête. 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é.

Requêtes CORS authentifiées utilisant OAuth

Version de MediaWiki :
1.44
Gerrit change 1118583

Pour réaliser une requête CORS authentifiée en utilisant OAuth, demander un jeton d'accès OAuth via le flux d'autorisation standard, puis faire la requête avec crossorigin= dans l'URL de la requête (pas de valeur nécessaire) et le Authorization: Bearer jeton d'accès dans l'entête de la requête.

Manuel:CORS contient plus d'informations et d'exemples sur la manière de manipuler les requêtes CORS en JavaScript.

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.

Utiliser JSONP rend plus fragile la sécurité de votre site source car, comme décrit précédemment, les réponses de l'API sont exécutées comme du code JavaScript. Si un attaquant compromet le site distant, il peut utiliser son accès pour exécuter du code JavaScript arbitraire sur les navigateurs web de vos utilisateurs, avec les permissions de votre site. Il est recommandé d'utiliser CORS à la place.
Toute requête JSONP sera traitée hors connexion (c'est à dire comme si on était un utilisateur anonyme), même si l'on est connecté dans le wiki distant.

Exemple

Requête GET

récupérer les titres de trois pages au hasard de la Wikipedia anglophone.

Exemple de code Javascript

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
 */
window.my_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=my_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

Voir aussi

Category:MediaWiki action API/fr