Configuración de FoxServer
Contenido
El archivo JSON se genera automaticamente al crear un proyecto API o WEB con WinFx. No tienes que manipular nada del fichero a menos que sea estrictamente necesario, de lo contrario WinFx se encargará de actualizar el fichero tras cada compilación del proyecto.
Estructura de Configuración
FoxServer utiliza un archivo JSON para su configuración. Este archivo se genera automáticamente al compilar un proyecto de API o Web, y contiene toda la información necesaria para el funcionamiento del servidor.
El archivo de configuración se almacena en formato JSON y define todos los aspectos del servidor: controladores, rutas, middleware, seguridad y más.
Un ejemplo básico de archivo de configuración:
{
"name": "masterdetail",
"description": "proyecto api para demostrar el maestro detalle",
"type": "api",
"active": false,
"host": "127.0.0.1",
"port": 8080,
"prefix": "",
"issecure": false,
"lang": "en",
"namespace": "masterdetail",
"dllpath": "F:\\A1\\testnewd\\masterdetail\\build\\Interop.masterdetail.dll",
"publicdir": "",
"priority": 999,
"controllers": [
/* Definición de controladores */
],
"middleware": {
/* Configuración de middleware */
},
"server": {
/* Configuración del servidor */
}
}
Configuración Básica del Servidor
Las propiedades principales de configuración del servidor son:
Propiedad | Descripción | Tipo |
---|---|---|
name |
Nombre del proyecto/servidor | String |
description |
Descripción del proyecto | String |
type |
Tipo de proyecto (api o web) | String |
active |
Indica si el servidor está activo | Boolean |
host |
Dirección IP o hostname donde se ejecutará el servidor | String |
port |
Puerto en el que escuchará el servidor | Number |
prefix |
Prefijo para todas las rutas (ej: "/api") | String |
issecure |
Indica si se usa HTTPS | Boolean |
lang |
Idioma predeterminado | String |
namespace |
Espacio de nombres para la DLL | String |
dllpath |
Ruta a la DLL de interoperabilidad | String |
publicdir |
Directorio para archivos públicos (solo para proyectos web) | String |
priority |
Prioridad del servidor (para múltiples servidores) | Number |
Ejemplo de configuración básica
{
"name": "miapi",
"description": "API para sistema de ventas",
"type": "api",
"active": true,
"host": "0.0.0.0",
"port": 8080,
"prefix": "/api/v1",
"issecure": false,
"lang": "es",
"namespace": "ventas",
"dllpath": "C:\\proyectos\\ventas\\build\\Interop.ventas.dll",
"publicdir": "",
"priority": 1
}
Configuración CORS
Cross-Origin Resource Sharing (CORS) permite que tu API sea accesible desde dominios diferentes. FoxServer ofrece una configuración sencilla para CORS:
{
"allowedorigins": "*",
"allowedmethods": "GET,POST,PUT,PATCH,DELETE,OPTIONS,HEAD",
"allowedheaders": "*"
}
Propiedad | Descripción |
---|---|
allowedorigins |
Dominios permitidos para acceder a la API. Usa "*" para permitir cualquier origen o especifica dominios separados por comas. |
allowedmethods |
Métodos HTTP permitidos. Por defecto incluye todos los métodos comunes. |
allowedheaders |
Cabeceras permitidas en las solicitudes. Usa "*" para permitir cualquier cabecera. |
Ejemplo de configuración CORS específica
{
"allowedorigins": "https://miapp.com,https://admin.miapp.com",
"allowedmethods": "GET,POST,PUT,DELETE",
"allowedheaders": "Content-Type,Authorization,X-Requested-With"
}
Configuración de Controladores
Los controladores definen los endpoints de tu API. Cada controlador puede tener múltiples endpoints que se mapean a procedimientos en tu código VFP:
"controllers": [
{
"classname": "masterdetailBackendClass",
"filename": "Main",
"path": "main",
"endpoints": [
{
"apiroute": "hello",
"backendprocedure": "pHello",
"httpmethod": "GET",
"ispublic": true,
"requiresauth": true
},
{
"apiroute": "users/{id}",
"backendprocedure": "pGetUser",
"httpmethod": "GET",
"ispublic": true,
"requiresauth": true
}
// Más endpoints...
]
}
// Más controladores...
]
Propiedades de un Controlador
Propiedad | Descripción |
---|---|
classname |
Nombre de la clase VFP que implementa el controlador |
filename |
Nombre del archivo (sin extensión) |
path |
Ruta relativa donde se encuentra el archivo |
endpoints |
Array de endpoints definidos para este controlador |
Propiedades de un Endpoint
Propiedad | Descripción |
---|---|
apiroute |
Ruta URL para acceder al endpoint (puede incluir parámetros como {id}) |
backendprocedure |
Nombre del procedimiento VFP que se ejecutará |
httpmethod |
Método HTTP (GET, POST, PUT, DELETE, etc.) |
ispublic |
Indica si el endpoint es público |
requiresauth |
Indica si requiere autenticación |
parameters |
Parámetros esperados (opcional) |
description |
Descripción corta del endpoint |
documentation |
Documentación detallada |
Ejemplo de un controlador completo
{
"classname": "VentasControllerClass",
"filename": "Ventas",
"path": "ventas",
"endpoints": [
{
"apiroute": "ventas",
"backendprocedure": "GetDocumentos",
"httpmethod": "GET",
"ispublic": true,
"requiresauth": true,
"description": "Obtiene lista de documentos de venta",
"documentation": "Este endpoint devuelve todos los documentos de venta filtrados por fecha"
},
{
"apiroute": "ventas/{id}",
"backendprocedure": "GetDocumento",
"httpmethod": "GET",
"ispublic": true,
"requiresauth": true,
"description": "Obtiene un documento específico"
},
{
"apiroute": "ventas/{id}/pdf",
"backendprocedure": "GenerarPDF",
"httpmethod": "GET",
"ispublic": true,
"requiresauth": true,
"description": "Genera PDF de una factura"
}
]
}
Configuración de Middleware
El middleware permite procesar las solicitudes antes o después de que lleguen a los controladores. FoxServer incluye varios tipos de middleware configurables:
"middleware": {
"auth": {
"enabled": false,
"loginendpoint": "auth/login",
"secret": "",
"timing": "pre",
"tokenexpirationseconds": 7200,
"type": "jwt"
},
"hooks": true,
"logging": {
"enabled": true,
"fileprefix": "masterdetail",
"format": "Detailed",
"options": {
"debug": true,
"errors": true,
"performance": true,
"requests": true,
"responses": true
},
"path": "f:\\a1\\testnewd\\masterdetail\\logs\\",
"timing": "pre"
},
"webhooks": {
"enabled": false,
"global": {
"backoff": [5, 15, 30],
"logging": {
"enabled": true,
"path": "logs/webhooks/",
"retentiondays": 30
},
"queue": {
"batchsize": 10,
"path": "queue/webhooks",
"workers": 2
},
"retries": 3,
"timeout": 30
},
"webhookendpoints": null
}
}
Middleware de Autenticación
Propiedad | Descripción |
---|---|
enabled |
Activa o desactiva la autenticación |
loginendpoint |
Ruta para el endpoint de login |
secret |
Clave secreta para firmar tokens JWT |
timing |
Momento de ejecución (pre o post) |
tokenexpirationseconds |
Tiempo de expiración del token en segundos |
type |
Tipo de autenticación (jwt) |
Middleware de Logging
Propiedad | Descripción |
---|---|
enabled |
Activa o desactiva el logging |
fileprefix |
Prefijo para los archivos de log |
format |
Formato de log (Simple, Detailed) |
options |
Opciones específicas de logging |
path |
Ruta donde se guardarán los logs |
timing |
Momento de ejecución (pre o post) |
Middleware de Webhooks
Los webhooks permiten notificar a sistemas externos cuando ocurren eventos en tu API:
Propiedad | Descripción |
---|---|
enabled |
Activa o desactiva los webhooks |
global |
Configuración global para todos los webhooks |
webhookendpoints |
Lista de endpoints de webhook |
Ejemplo de configuración de autenticación
"auth": {
"enabled": true,
"loginendpoint": "auth/login",
"secret": "mi_clave_secreta_muy_segura",
"timing": "pre",
"tokenexpirationseconds": 3600,
"type": "jwt"
}
Configuración SSL
Para habilitar HTTPS en tu servidor, configura las siguientes propiedades:
{
"issecure": true,
"certificatename": "mi_certificado.pfx",
"certificatepassword": "contraseña_del_certificado"
}
Propiedad | Descripción |
---|---|
issecure |
Activa el modo HTTPS |
certificatename |
Nombre del archivo de certificado (.pfx o .p12) |
certificatepassword |
Contraseña del certificado |