API:Peticiones en sitios cruzados
Esta página es parte de la documentación de la API de acciones de MediaWiki. |
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.
Uso de CORS
El API de MediaWiki requiere que el origen
sea suministrado como parámetro de cadena de consulta, siendo el valor el sitio desde el que se origina la solicitud, que coincide con el encabezado Origen requerido 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 el parámetro origin
es proporcionado y la petición no devuelve una respuesta CORS exitosa, MediaWiki≥1.30 devolverá un $encabezado de rechazo con una breve razón del error, p. Ej. en caso de origen no coincidente o encabezados no compatibles en un encabezado de petición $reqheaders.
Peticiones CORS no autentificadas
Las peticiones CORS no autenticadas pueden ser realizadas desde cualquier origen estableciendo el parámetro de petición origin
en *
. En este caso, MediaWiki incluirá el encabezamiento $code2 en la respuesta y procesará la petición como si hubiera cerrado la sesión.
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.
Ejemplo
CONSIGUE petición
Código de muestra
var apiEndpoint = "https://commons.wikimedia.org/w/api.php";
var params = "action=query&list=allimages&ailimit=3&format=json";
/**
* Enviar la petición para conseguir las imágenes
*/
fetch(apiEndpoint + "?" + params + "&origin=*")
.then(function(response){return response.json();})
.then(function(response) {
var allimages = response.query.allimages; // Procesar la salida para conseguir los nombres de imagen
Object.keys(allimages).forEach(function(key) {
console.log(allimages[key].name);
});
});
Respuesta
!!!!!_Mdina_Fortifications,_Ditch,_Bridge_and_Main_Gate.jpg
!!!!_Mdina_buildings_!!!!.jpg
!!!!_Palazzo_Dorell_ancillary_building.jpg
Peticiones CORS autenticadas
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.
Uso de JSONP
El API $Json acepta un parámetro de callback
, cuyo valor es una función de JavaScript en la que el JSON resultado será incluido .
Esto se puede usar para llamar a la API en un sitio remoto añadiendo etiquetas <script>
al documento.
Ejemplo
CONSIGUE petición
Código de muestra
var apiEndpoint = "https://en.wikipedia.org/w/api.php";
var params = "action=query&list=random&rnlimit=3&format=json";
/**
* La función para envolver el resultado
*/
window.my_callback = function (response) {
var pages = response.query.random; // Procesar la producción para conseguir los títulos.
Object.keys(pages).forEach(function(key) {
console.log(pages[key].title);
});
};
var scriptTag = document.createElement("script"); // Crear dinámicamente una etiqueta "script"
scriptTag.src = apiEndpoint + "?" + params + "&callback=my_callback"; // Señalar la cadena de consulta
document.body.appendChild(scriptTag); // Agregar la etiqueta de script al documento
Respuesta
Kache Aye Shoi
Talk:Sarbka, Wągrowiec County
Category:Nakhon Ratchasima Province