🗂 REST Server Go

DataSnap compatible — Firebird 3.0 backend

⚡ Inicio rapido

Verifica que el servidor responde:

http://localhost:9090/health

Los endpoints GET devuelven formato columnar DataSnap.
CreatePedido devuelve un objeto JSON con las claves creadas.

📦 Formato de respuesta DataSnap

Todos los GET devuelven arrays por columna dentro de result[0]:

{
  "result": [{
    "CLAVE":  [1, 2, 3],
    "NOMBRE": ["Cliente A", "Cliente B", "Cliente C"],
    "ACTIVO": ["S", "S", "N"]
  }]
}

Fila i: result[0]["NOMBRE"][i]

🔫 Endpoints

GET
Health check

Verifica que el servidor y Firebird estan activos.

http://localhost:9090/health
GET
EchoString

Devuelve el mismo valor recibido.

http://localhost:9090/datasnap/rest/TServerMethods1/EchoString/hola
GET
ReverseString

Devuelve el texto recibido al reves.

http://localhost:9090/datasnap/rest/TServerMethods1/ReverseString/abcdef
GET
GetArticulos

Articulos activos con precio, stock, familia e IVA.

http://localhost:9090/datasnap/rest/TServerMethods1/GetArticulos
GET
GetClientes

Clientes activos con centros, datos bancarios y direccion de envio.

http://localhost:9090/datasnap/rest/TServerMethods1/GetClientes
GET
GetPedidos

Pedidos en un rango de fechas. Para un unico dia usa la misma fecha en ambos parametros.

http://localhost:9090/datasnap/rest/TServerMethods1/GetPedidos?desde=2026-03-13&hasta=2026-03-13
desde YYYY-MM-DD   hasta YYYY-MM-DD  | Un dia: desde=2026-03-13&hasta=2026-03-13
GET
GetTarifasCliente

Tarifas de precio especial de un cliente.

http://localhost:9090/datasnap/rest/TServerMethods1/GetTarifasCliente/{codCliente}
{codCliente} → APP$REC_CLIENTE.CODIGO  | Ej: /270
GET
GetPrecioArticulosClienteHistorido

Historial de precios de un articulo para un cliente en los ultimos N dias.

http://localhost:9090/datasnap/rest/TServerMethods1/GetPrecioArticulosClienteHistorido/{codCliente}/{codArticulo}/{dias}
{codCliente} codigo cliente   {codArticulo} codigo articulo   {dias} dias hacia atras
Ej: /270/9345/90
POST
ExecuteQuery
Ejecuta un SELECT libre contra Firebird. Devuelve formato columnar DataSnap.
/datasnap/rest/TServerMethods1/ExecuteQuery
{  "sql": "SELECT FIRST 10 CLAVE, NOMBRE FROM APP$REC_CLIENTE WHERE ACTIVO = 'S'"  }
Precaucion: solo SELECT. No ejecuta DML.
POST
CreatePedido
Crea un pedido con todas sus lineas en una transaccion atomica. Resuelve codigos de cliente y articulo internamente.
/datasnap/rest/TServerMethods1/CreatePedido

Body:

{
  "codigo_cliente":     "270",        // APP$REC_CLIENTE.CODIGO  (obligatorio)
  "fecha":              "2026-02-17", // YYYY-MM-DD, default: hoy
  "fecha_entrega":      "2026-02-20", // opcional
  "forma_pago":         "30 dias",
  "forma_envio":        "Por sus medios",
  "observaciones":      "Texto libre",
  "cli_pedido":         "REF-EXT-001", // referencia cliente, opcional
  "cli_pedido_persona": "Juan Garcia", // contacto, opcional
  "lineas": [
    {
      "codigo_articulo": "9345",  // APP$ALM_ARTICULO.CODIGO (obligatorio)
      "cantidad":        10.5,    // obligatorio
      "precio":          3.50,
      "unidades":        "kg",    // ud | kg | Cajas | Bandejas  (default: ud)
      "categoria":       "S",    // S=Estandar  E=Extra  P=Premium  (default: S)
      "envasado":        "N"     // S | N  (default: N)
    }
  ]
}

Respuesta HTTP 201:

{
  "ok":             true,
  "clave_pedido":   132078,  // APP$REC_PEDIDO.CLAVE
  "clave_nodo":     8365801, // GEN$NODO.CLAVE
  "numero_pedido":  14,
  "lineas_creadas": 2
}
Campo lineaOblig.ValoresDefault
codigo_articulosiAPP$ALM_ARTICULO.CODIGO-
cantidad sidecimal-
precio nodecimal0
unidades noud | kg | Cajas | Bandejasud
piezas nodecimal1
categoria noS=Estandar | E=Extra | P=PremiumS
envasado noS | NN
observaciones notexto librenull

💻 Ejemplos curl

# Health
curl http://localhost:9090/health

# Articulos
curl http://localhost:9090/datasnap/rest/TServerMethods1/GetArticulos

# Clientes
curl http://localhost:9090/datasnap/rest/TServerMethods1/GetClientes

# Pedidos de un dia concreto
curl "http://localhost:9090/datasnap/rest/TServerMethods1/GetPedidos?desde=2026-03-13&hasta=2026-03-13"

# Tarifas cliente 270
curl http://localhost:9090/datasnap/rest/TServerMethods1/GetTarifasCliente/270

# Historico precios (cliente 270, art 9345, 90 dias)
curl http://localhost:9090/datasnap/rest/TServerMethods1/GetPrecioArticulosClienteHistorido/270/9345/90

# Consulta libre
curl -X POST http://localhost:9090/datasnap/rest/TServerMethods1/ExecuteQuery -H "Content-Type: application/json" ^
     -d "{"sql":"SELECT FIRST 5 CLAVE, NOMBRE FROM APP$REC_CLIENTE"}"

# Crear pedido
curl -X POST http://localhost:9090/datasnap/rest/TServerMethods1/CreatePedido -H "Content-Type: application/json" ^
     -d "{"codigo_cliente":"270","fecha":"2026-03-13","fecha_entrega":"2026-03-13","forma_pago":"30 dias","lineas":[{"codigo_articulo":"9345","cantidad":10.5,"precio":3.50,"unidades":"kg"},{"codigo_articulo":"9218","cantidad":5,"precio":8.00,"unidades":"ud","categoria":"E"}]}"