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:
/guarani/3.18/rest/v1/status
Ambos ambientes retornan mensaje indicando que “resultado”: “OK”"
/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”
<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
/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?
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
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?
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?
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”
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).