API:Peticiones en sitios cruzados

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Cross-site requests and the translation is 28% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎dansk • ‎español • ‎français • ‎polski • ‎română • ‎русский • ‎ไทย • ‎中文 • ‎日本語 • ‎한국어

Si un script de usuario o un accesorio necesita hacer una llamada de la API contra otro sitio de MediaWiki (por ejemplo, un script en Wikipedia en español tiene que comprobar información de imágenes de Commons), tiene que usar JSONP o CORS.

Uso de JSONP

El format=json de la API acepta un parámetro «callback», que nombra una función de JavaScript en la que la respuesta JSON estará empaquetada.

Esto se puede usar para llamar a la API en un sitio remoto añadiendo etiquetas <script> al documento.

Ten en cuenta que las peticiones JSONP se procesarán como si el usuario no tuviera una sesión activa, aunque la sesión del navegador esté autentificada contra el wiki remoto.

Example

GET request

Get the titles of three random pages from English Wikipedia.

Sample code

var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";

/**
 * The function to wrap the result
 */
var callback = function (response) {
    var pages = response.query.random; // Process the output to get the titles
    Object.keys(pages).forEach(function(key) {
        console.log(pages[key].title);
    });
};

var scriptTag = document.createElement("script"); // Dynamically create a "script" tag
scriptTag.src = apiEndpoint + "?" + params + "&callback=callback"; // Point to the query string

document.body.appendChild(scriptTag); // Add the script tag to the document

Response

Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province

Uso de CORS

La API de MediaWiki requiere que se indique origin como un parámetro de consulta, apropiadamente nombrado «origin», que se hace corresponder con la cabecera Origin requerida por el protocolo CORS.

Ten en cuenta que el parámetro debe incluirse en cualquier petición de preverificación, y por tanto debe incluirse en la parte de la cadena de consulta de la URI de la petición, incluso para peticiones POST.

Cuando se especifica el parámetro de petición «origin», MediaWiki (desde la versión 1.30) devuelve una cabecera MediaWiki-CORS-Rejection con un breve motivo del error en caso de que la petición no diera lugar a una respuesta CORS exitosa, por ejemplo, en caso de error de correspondencia en el origen o de cabeceras no soportadas en la cabecera de petición Access-Control-Request-Headers.

Unauthenticated CORS Requests

Las peticiones CORS no autentificadas se pueden realizar desde cualquier origen. Para ello hay que fijar el parámetro de petición «origin» a «*». En este caso, MediaWiki incluirá la cabecera Access-Control-Allow-Credentials: false en la respuesta y procesará la petición como si el usuario no tuviera una sesión activa (en caso de que por algún motivo se enviaran las credenciales igualmente).

Example

GET request

Get the names of the first three images from Wikimedia Commons.

Sample code
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";

/**
 * Send the request to get the images
 */
fetch(apiEndpoint + "?" + params + "&origin=*")
    .then(function(response){return response.json();})
    .then(function(response) {
          var allimages = response.query.allimages; // Process the output to get the image names
          Object.keys(allimages).forEach(function(key) {
               console.log(allimages[key].name);
          });
     });
Response
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg

Authenticated CORS Requests

Para hacer una petición CORS autentificada, la variable $wgCrossSiteAJAXdomains del wiki remoto debe estar configurada de tal forma que admita el sitio de origen. Si el origen del CORS es aceptado, MediaWiki incluirá la cabecera Access-Control-Allow-Credentials: true en la respuesta para que se puedan enviar cookies de autentificación.

Véase Manual:CORS para las instrucciones para manejar peticiones CORS en JavaScript.

Additional notes

  • Detailed differences between JSONP and CORS are available at CORS vs JSONP.

Véase también