API HTTP local
Genera EPS, SVG y PNG, convierte LaTeX y MathML, reconoce imágenes y sigue vínculos con la API HTTP de NeoMath, que solo atiende en tu propio equipo y exige token.
En esta página
La API HTTP local es un servidor que solo atiende en el propio equipo (127.0.0.1). Es la que usa el plugin de InDesign, y sirve también para scripts y otros programas en cualquier lenguaje. La referencia de cada ruta está en Referencia de la API HTTP.
Iniciar#
Hay dos servidores con la misma API:
| Comando | Para quién | Rutas extra |
|---|---|---|
NeoMath --servidor |
la aplicación instalada; es la que usa InDesign | /v1/ocr, /v1/quimica, /v1/editar, /v1/vinculos |
neomath servidor |
la línea de comandos (sin las rutas de la aplicación) | /v1/vinculos; las demás responden 501 |
NeoMath --servidor
neomath servidor --porta 8790El instalador puede dejar NeoMath --servidor iniciándose con el sistema (activado de forma predeterminada en Windows y Linux). No abre ventana y usa la carpeta del usuario como raíz.
| Opción | Predeterminado | Qué hace |
|---|---|---|
--porta N |
8790 | puerto |
--token T |
generado | token fijo; sin la opción, un token aleatorio de 64 caracteres en cada inicio |
--sem-token |
desactiva el token (solo para pruebas) | |
--origem URL |
ninguna | origen de página web autorizado (repetible) |
--raiz CARPETA |
desactivado (neomath), carpeta del usuario (NeoMath) |
permite /v1/lote, /v1/editar y /v1/vinculos solo dentro de esa carpeta |
--threads N |
4 | peticiones atendidas a la vez (1 a 16) |
--sessao ARCHIVO |
carpeta de datos | dónde escribir el servidor.json |
Puerto y token: servidor.json#
Al iniciar, el servidor escribe el servidor.json, con permiso solo para el usuario:
| Sistema | Ruta |
|---|---|
| Windows | %LOCALAPPDATA%\NeoMath\servidor.json |
| macOS | ~/Library/Application Support/NeoMath/servidor.json |
| Linux | $XDG_STATE_HOME/neomath/servidor.json o ~/.local/state/neomath/servidor.json |
{ "porta": 8790, "token": "9f2c…", "url": "http://127.0.0.1:8790", "pid": 4242, "versao": "0.2.0" }Los clientes leen el puerto y el token de ese archivo.
Autenticación#
Toda petición, salvo GET /v1/saude, lleva el token:
Authorization: Bearer <token>También valen X-NeoMath-Token: <token> y ?token=<token> en la URL, para quien no puede enviar cabeceras.
Ejemplos#
curl
TOKEN=$(python3 -c "import json,os;print(json.load(open(os.path.expanduser('~/.local/state/neomath/servidor.json')))['token'])")
curl -s http://127.0.0.1:8790/v1/saude
curl -s -H "Authorization: Bearer $TOKEN" -X POST http://127.0.0.1:8790/v1/svg -d '{"mathml":"\\frac{a}{b}"}' -o eq.svg
curl -s -H "Authorization: Bearer $TOKEN" -X POST "http://127.0.0.1:8790/v1/eps?bruto=1" -d '{"mathml":"\\ce{2 H2 + O2 -> 2 H2O}","opcoes":{"cor":[0,100,100,0]}}' -o reacao.epsJavaScript
const r = await fetch("http://127.0.0.1:8790/v1/eps", {
method: "POST",
headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` },
body: JSON.stringify({ mathml: "x^2 + y^2 = r^2" }),
});
const g = await r.json();
console.log(g.largura_pt, g.altura_pt, g.linha_base_pt);Python
import json, os, urllib.request
s = json.load(open(os.path.expandvars(r"%LOCALAPPDATA%\NeoMath\servidor.json")))
pedido = urllib.request.Request(s["url"] + "/v1/png?dpi=600", data=json.dumps({"mathml": r"\sqrt{2}"}).encode(),
headers={"Authorization": "Bearer " + s["token"], "Content-Type": "application/json"})
open("raiz.png", "wb").write(urllib.request.urlopen(pedido).read())El campo mathml acepta MathML o LaTeX: NeoMath lo reconoce solo.
Opciones de salida#
| Clave | Ejemplo | Efecto |
|---|---|---|
neqp |
texto del estilo | estilo (fuentes, tamaños, espaciados) |
cor |
"#1F4E79", "red", [0,100,100,0], [31,78,121] |
color de la ecuación (una lista de 4 es CMYK) |
cor_em_tudo |
true |
pinta también trazos y fracciones |
tamanho |
18 |
tamaño del cuerpo en pt (1 a 1000) |
fonte |
"Arial" |
fuente del texto, de las variables y de los números |
Respuestas y errores#
| Código | Cuándo |
|---|---|
| 200 | éxito |
| 400 | JSON u opciones no válidos |
| 401 | sin token o token incorrecto |
| 403 | origen de navegador no autorizado, o carpeta fuera de --raiz |
| 404 | ruta desconocida |
| 413 | cuerpo mayor que 16 MB (64 MB en /v1/lote-zip) |
| 421 | Host distinto de 127.0.0.1:<puerto> o localhost:<puerto> (protección contra DNS rebinding) |
| 422 | construcción no admitida, o imagen de OCR no reconocida |
| 501 | ruta que solo existe en el servidor de la aplicación |
{ "status": "erro", "codigo": "token", "erro": "token ausente ou inválido …" }Flujo de edición#
Así mantiene InDesign las ecuaciones al día:
- El cliente genera el EPS con
"formato": "neof"y lo escribe en el documento. - Llama a
POST /v1/editarcon la ruta; la aplicación abre el archivo y devuelvemodificado_msytamanho. - Consulta
POST /v1/vinculoscada 2 segundos. - Cuando la fecha o el tamaño cambian, el archivo se guardó en NeoMath: el cliente actualiza el vínculo y recupera el código nuevo con
/v1/abriry/v1/para-latex.
Seguridad#
- Escucha solo en
127.0.0.1y rechaza otroHost. - Las peticiones de navegador solo se aceptan de los orígenes pasados en
--origem. - Las rutas que tocan el disco quedan limitadas a la carpeta
--raiz(con enlaces simbólicos resueltos). - Las rutas antiguas sin
/v1siguen funcionando para clientes antiguos, también con token.