Error en API REST 3.20.2

Hola!

Hace poco actualizamos Guaraní de 3.18 a 3.20.2.

Tenemos dos ambientes (UAT y PROD) que deberían ser idénticos. El tema es que en UAT nos funciona bien la API REST y en PROD no.

Hicimos estas pruebas:

  1. /guarani/3.18/rest/v1/status
    Ambos ambientes retornan mensaje indicando que “resultado”: “OK”"

  2. /guarani/3.18/rest/v1/info
    UAT retorna un mensaje con los datos correctos.
    PROD retorna un mensaje indicando que “La información solicitada no esta disponible”

  3. <dominio/guarani/3.18/rest/v1/api-docs
    UAT retorna un mensaje con los datos correctos.
    PROD retorna error indicando que "“Error Interno en el servidor: No se encuentra el recurso para v1/api-docs en el directorio /usr/local/proyectos/guarani/php/rest. Ruta mal formada?”

Al ver el web_services.log notamos estas diferencias antes del error:
[379958][guarani][DEBUG] Procesando URL ‘/api-docs’ ← UAT
[584650][guarani][DEBUG] Procesando URL ‘/v1/api-docs’ ← PROD

  1. /guarani/3.18/rest/v1/personas
    UAT retorna un mensaje con los datos correctos.
    PROD retorna mensaje indicando que “Class ‘PERS\Guarani\php\rest\v1\modelos\rest_personas’ not found”

Buscamos un rato largo y no encontramos diferencias en las configs de uno y otro. Se les ocurre que podemos haber hecho mal en la configuración de PROD?

Gracias!

Hola Javier
segiuimos el tema por mail
saludos

Hola Javier,

2. /guarani/3.18/rest/v1/info UAT retorna un mensaje con los datos correctos. PROD retorna un mensaje indicando que "La información solicitada no esta disponible"

Eso lo da en la función get_list de php/rest/v1/info/recurso_info.php, ¿en el archivo proyecto.ini tenes definido version,api_major y api_minor? Compara la configuración de dicho archivo en los dos ambientes.

3. <dominio/guarani/3.18/rest/v1/api-docs UAT retorna un mensaje con los datos correctos. PROD retorna error indicando que ""Error Interno en el servidor: No se encuentra el recurso para v1\/api-docs en el directorio \/usr\/local\/proyectos\/guarani\/php\/rest. Ruta mal formada?"
¿Tenes bien configurado el archivo [b]instalacion/i__desarrollo/p__guarani/rest/servidor.ini[/b]?

; Método de autenticación, puede ser basic o digest
autenticacion = digest

[settings]
formato_respuesta = json
url_protegida = /.*/

; Configuración de paths para las versiones de la api
[v1]
path_api=<path_gestion>/php/rest/v1
path_api_pers=<path_gestion>/personalizacion/php/rest/v1

Referencia: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/API_REST_GUARANI

4. /guarani/3.18/rest/v1/personas UAT retorna un mensaje con los datos correctos. PROD retorna mensaje indicando que "Class 'PERS\Guarani\php\rest\v1\modelos\rest_personas' not found"
¿existe el archivo [b]personalizacion/php/rest/v1/modelos/rest_personas.php[/b]? ¿en [b]composer.json[/b] tenes lo siguiente?

    "autoload": {
        "psr-4": {
            "": "src/",
            "SIU\\Guarani\\php\\":"php/",
            "PERS\\Guarani\\php\\":"personalizacion/php/"
        }
    },

saludos.
4

Hola!
Respondo inline:

2. /guarani/3.18/rest/v1/info Eso lo da en la función get_list de php/rest/v1/info/recurso_info.php, ¿en el archivo proyecto.ini tenes definido version,api_major y api_minor? Compara la configuración de dicho archivo en los dos ambientes.
Si, están las tres entradas, con idéntica configuración en ambos ambientes.
3. <dominio/guarani/3.18/rest/v1/api-docs¿Tenes bien configurado el archivo instalacion/i__desarrollo/p__guarani/rest/servidor.ini?
También los veo iguales. Esto es lo que tenemos en PROD

; Método de autenticación, puede ser basic o digest
autenticacion = digest
;;
;;Opciones que recibe la librería - > rest/rest.php
;;
[settings]
formato_respuesta = json
url_protegida = /.*/

; Configuración de paths para las versiones de la api
[v1]
path_api=/usr/local/proyectos/guarani/php/rest/v1
path_api_pers=/usr/local/proyectos/guarani/personalizacion/php/rest/v1

4. /guarani/3.18/rest/v1/personas ¿existe el archivo personalizacion/php/rest/v1/modelos/rest_personas.php?
Si.
¿en composer.json tenes lo siguiente?

    "autoload": {
        "psr-4": {
            "": "src/",
            "SIU\\Guarani\\php\\":"php/",
            "PERS\\Guarani\\php\\":"personalizacion/php/"
        }
    },

Si.

En esta prueba, si voy a los web_services.log veo lo siguiente:
UAT


[380787][guarani][DEBUG] Iniciando el pedido
[380787][guarani][DEBUG] Procesando URL '/personas'
[380787][guarani][DEBUG] Iniciando Autenticacion
[380787][guarani][DEBUG] Pedido capturado por el firewall
[380787][guarani][DEBUG] Usuario 'sidcer_test' autenticado y autorizado
...
[380787][guarani][DEBUG] Pedido finalizado
(END)

PROD


web_services.log
[587093][guarani][DEBUG] Iniciando el pedido
[587093][guarani][DEBUG] Procesando URL '/v1/personas'
[587093][guarani][DEBUG] Iniciando Autenticacion
[587093][guarani][DEBUG] Pedido capturado por el firewall
[587093][guarani][DEBUG] Usuario 'sidcer' autenticado y autorizado
(END)

sistema.log
[CRITICAL][toba] Class 'PERS\Guarani\php\rest\v1\modelos\rest_personas' not found

Notamos la diferencia en “Procesando URL…”. En una figura el v1 y en la otra no. Pero no entendemos por qué pasa eso.

Sumo una prueba más:
5. /guarani/3.18/rest/v1/
En UAT tira el Swagger con la referencia de la API
En PROD tira mensaje indicando que “descripcion”: “Acceso denegado”

Hola Javier,

¿y el archivo instalacion/toba.conf lo tenes igual que en el otro servidor y como dice la documentación?

saludos.
2

Si. Esta actualizado según lo que dice la documentación. Y es igual al de UAT.

Finalmente, encontramos que era.

Corrimos el composer de nuevo en UAT y PROD (para estar seguros de tener todas las dependencias actualizadas en ambos ambientes) y vimos que en PROD modificó varios paquetes. Luego de esto, PROD se comenzó a comportar igual a UAT.

Estamos ahora viendo la interfaz de SICER y también parece estar funcionando acorde a lo esperado.

Todo resuelto (aunque nos queda la duda de por qué esos paquetes no actualizaron en su momento).

Gracias por la ayuda!

Hola Javier, me alegro que lo pudieron solucionar!!!

Quizás la diferencia es que en producción el composer se ejecuta de la siguiente manera:

composer install --prefer-dist --no-dev --optimize-autoloader

Documentación: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/version3.20.0/instalacion_desde_cero/produccion/gestion/linux

Y en desarrollo de la siguiente manera:

composer install

Documentación: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/version3.20.0/instalacion_desde_cero/instalacion/gestion/linux

Es probable que este error venia por el autoload de composer:

PROD retorna mensaje indicando que "Class 'PERS\Guarani\php\rest\v1\modelos\rest_personas' not found"

saludos.
2