hefestoapicontainer

Validaciones

Hefesto usa JSON Schema para validar el body de las requests y las responses de conexiones HTTP. Si la validación falla, se lanza una excepción que interrumpe el flujo.

JSON Schema en Maps

Los schemas se almacenan como ficheros JSON en el directorio Maps/ de la API. El nombre del fichero (sin extensión) se usa como target en las directivas de validación.

Ejemplo de Maps/user.json:

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "number" },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "age"],
  "additionalProperties": false
}

Validar el body de una request

Usa la directiva LoadAndValidateModel:

post /user:
  LoadUser:
    directive: LoadAndValidateModel
    source: $.message.bodyAsArray
    target: user
  Connect:
    directive: DatabaseConnect
  SaveUser:
    directive: SaveUser
    user: $.memory.user

Parámetros:

Si la validación falla, LoadAndValidateModel lanza una excepción con código 400 (o 502 si server-side-error es true) y un mensaje descriptivo del error.

Validar la response de una conexión HTTP

La directiva Pull valida automáticamente la respuesta contra el JSON Schema correspondiente al parámetro target:

ReadUser:
  directive: Pull
  host: https://mymicroservice.com
  path: /ms/user
  target: user  # Valida contra Maps/user.json

Si la respuesta del microservicio no cumple el schema, Pull lanza una excepción (502 por defecto si la validación es del lado del servidor).

Validar sin cargar en memory

Si solo quieres validar sin guardar el resultado en memory, usa ValidateModel directamente:

ValidateModel::run($state, [
    'name' => 'user',  # Schema en Maps/user.json
    'server-side-error' => false
]);

El objeto a validar debe estar previamente cargado en memory con la clave indicada en name.