API: visión general
Qué publica el sitio como JSON, cómo leerlo, qué se promete que no cambie y cómo llamarlo desde cualquier lenguaje.
La documentación de un plugin no debería copiar lo que es un botón, una tabla o un color: debería apuntar aquí. Todo lo que sabe este sitio se publica como JSON estático, así que cualquier otra documentación, script de build, prueba o editor puede leerlo. Esta página es el mapa; las demás páginas de la guía profundizan en cada parte.
Qué obtienes
| Quieres… | Lee | Página de la guía |
|---|---|---|
| Saber qué existe y abrir una página en un estado dado | /api/index.json |
Visión general, Enlaces y estados |
| Listar cada página y leer su texto | /api/index.json, /api/pages/<id>.json |
Páginas y búsqueda |
| Copiar el marcado de un componente | /api/components/<componente>.json |
Componentes y ejemplos |
| Leer las variables CSS de una versión de Moodle | /api/tokens/<version>.json |
Tokens y versiones |
| Dibujar un icono de Moodle con Font Awesome | /api/icons.json |
Iconos y marca |
| Usar los colores y el logo de Didactika | /api/brand.json |
Iconos y marca |
| Comprobar la forma de cada archivo | Referencia de los archivos |
La dirección
GET https://moodle-design.didactika.org/api/index.json
El sitio lo sirve GitHub Pages: no hay clave, ni inicio de sesión, ni límite de uso que gestionar. Cada respuesta es un archivo JSON con Content-Type: application/json y la cabecera Access-Control-Allow-Origin: *, así que también se puede leer desde un navegador en cualquier otro sitio.
El punto de entrada
/api/index.json guarda, en un archivo:
| Campo | Qué es |
|---|---|
schema |
La versión de la forma del JSON (mira más abajo) |
name, site, repository, licence |
Qué es esto y dónde vive |
languages |
["en", "es"] |
designSystem, theme |
Las versiones del sistema de diseño y del tema de Didactika, con la de por defecto de cada uno |
versions[] |
Cada versión de Moodle con su generación de Bootstrap, familia de iconos, soporte y los enlaces a sus tokens y stylesheet |
resources |
Las direcciones de los componentes, los iconos y la marca |
pages[] |
Cada página: identificador, grupo, orden, sección, versiones, título, resumen, direcciones y los ejemplos que usa |
deepLinks |
Cómo se abre una página en un estado dado |
const root = 'https://moodle-design.didactika.org';
const index = await (await fetch(root + '/api/index.json')).json();
if (index.schema !== 1) { throw new Error('Esquema desconocido: ' + index.schema); }
console.log(index.designSystem.default, index.theme.default); // "0.1" "0.1"
console.log(index.versions.map((v) => v.label)); // ["Moodle 5.3 LTS", ...]
Estable a propósito
- Cada archivo lleva
"schema": 1. El número cambia solo cuando se quita un campo o cambia su significado. Añadir campos nunca lo cambia, así que un lector que comprueba el número e ignora lo que no conoce sigue funcionando cuando el sitio crece. - Los identificadores de páginas (
bootstrap/buttons) y de ejemplos (buttons/icons) no cambian una vez publicados. Los títulos y resúmenes sí pueden. - Un ejemplo o una página que se quita desaparece de las listas; su dirección antigua deja de responder.
- Los datos se regeneran con el sitio. Guárdalos en caché un día, no para siempre, y nunca más tiempo que la versión del sistema de diseño a la que apuntas.
Llamarlo desde otros lenguajes
curl -s https://moodle-design.didactika.org/api/index.json | jq '.pages[] | select(.group == "patterns") | .id'
$root = 'https://moodle-design.didactika.org';
$index = json_decode(file_get_contents($root . '/api/index.json'), true);
foreach ($index['pages'] as $page) {
echo $page['id'] . ' - ' . $page['title']['es'] . PHP_EOL;
}
import json, urllib.request
root = "https://moodle-design.didactika.org"
with urllib.request.urlopen(root + "/api/components/buttons.json") as response:
buttons = json.load(response)
print([e["id"] for e in buttons["examples"]])
Buenas maneras
- Descarga una vez en tu build, no en cada visita de tu documentación.
- Comprueba
schemaantes de leer e ignora los campos que no conoces. - Conserva la licencia: el sitio y sus datos son GPL-3.0-or-later.
UI