(Solucionado) Error Servicio Rest migración proyecto 2.7 a 3.3

Buenas!

Estamos trabajando en migrar tres proyectos propios desarrollados con toba. Pasamos de la versión 2.7 a la 3.3 y pudimos migrar toda la información correctamente. Pero al probar la funcionalidad del sistema, notamos que los Servicios Rest que se ofrecen no devuelven nada. Es decir, si desde el Proyecto A consumimos un servicio esto funciona, pero si queremos consultar un servicio del Proyecto A la respuesta es nula.

Ingresando al Swagger del proyecto devuelve el siguiente mensaje:

Unable to render this definition
The provided definition does not specify a valid version field.

Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: “2.0” and those that match openapi: 3.0.n (for example, openapi: 3.0.0).

Pero no encontré donde debo indicar la “versión” y no se si esto será un tema de la visualización únicamente o si será todo lo mismo.

Los logs de Toba no devuelven ningún error.

Alguna sugerencia?

Hola Romina,

notamos que los Servicios Rest que se ofrecen no devuelven nada. Es decir, si desde el Proyecto A consumimos un servicio esto funciona, pero si queremos consultar un servicio del Proyecto A la respuesta es nula.

Como es que estan intentando acceder al servicio?.. via curl o Swagger? y porque decis que la respuesta es nula?

Ingresando al Swagger del proyecto devuelve el siguiente mensaje: Unable to render this definition . .

Normalmente, eso significa que el json que se arma con la definicion esta roto, puede ser algo tan simple como un notice que esta saliendo en el medio del mismo.
Para chequearlo (y ver que se rompe) podes hacer lo siguiente via linea de comandos:


bin/toba servicios_web serv_generar_doc -r 1 --tipo_ws rest --nombre-archivo [path_archivo_exportacion]

Luego te va a pedir el proyecto en cuestion y con eso se genera la misma definicion que veria Swagger, al menos podes ver si es un problema con la documentacion de los metodos de los WS… o alguna otra cuestion.

Los logs de Toba no devuelven ningún error

Revisaron los logs de Apache?.. si es un fatal quizas no alcance a grabarse en el log de Toba.

Otro lugar para mirar (si aun no lo chusmearon) seria en instalacion/i__[blahblah]/p__[tutu]/logs/web_services.log en el proyecto que sirve la API.

Una cuestion extra, la version de Swagger que estan utilizando es la que viaja contenida en el framework?

Saludos

Hola,

Como es que estan intentando acceder al servicio?.. via curl o Swagger? y porque decis que la respuesta es nula?

Dentro del sistema me conecto a través de CURL, aparentemente la conexión se establece correctamente y se ejecuta el servicio pero la respuesta llega sin datos, a eso me refería con nula. La conexión con la BDD esta OK en otras funciones del sistema, y las consultas del recurso REST las verifique (aunque no hayan sufrido modificaciones) y ahí si tengo info. Desde Swagger cuando quiero acceder es que tira el otro error de “unable to render this definition”.

Normalmente, eso significa que el json que se arma con la definicion esta roto, puede ser algo tan simple como un notice que esta saliendo en el medio del mismo. Para chequearlo (y ver que se rompe) podes hacer lo siguiente via linea de comandos:

bin/toba servicios_web serv_generar_doc -r 1 --tipo_ws rest --nombre-archivo [path_archivo_exportacion]

Luego te va a pedir el proyecto en cuestion y con eso se genera la misma definicion que veria Swagger, al menos podes ver si es un problema con la documentacion de los metodos de los WS… o alguna otra cuestion.

Al ejecutar el comando que me pasaste efectivamente habia algunos warning de PHP que corregí. Pero incluso cuando la respuesta del comando esta OK, sigo teniendo el mismo problema (tanto en el swagger como en el curl dentro del sistema)

Revisaron los logs de Apache?... si es un fatal quizas no alcance a grabarse en el log de Toba.

Si, pero no lanza ningún error.

Otro lugar para mirar (si aun no lo chusmearon) seria en [b]instalacion/i__[blahblah]/p__[tutu]/logs/web_services.log[/b] en el proyecto que sirve la API.

No tengo este archivo que me indicas, se activa de alguna forma?

Una cuestion extra, la version de Swagger que estan utilizando es la que viaja contenida en el framework?

Si, no modificamos nada. Es la que se instala con el composer.

Saludos

Hola Romina,

Una cuestion a revisar seria si estan usando el “hidratador” en el armado de la respuesta del servicio, quizas no se este reconociendo el modelo y por ello la respuesta sea nula, podrian chequear tirando un var_dump() de los datos que deberian devolverse previo a eso?.. como para ver si el problema radica alli.

Al ejecutar el comando que me pasaste efectivamente habia algunos warning de PHP que corregí. Pero incluso cuando la respuesta del comando esta OK, sigo teniendo el mismo problema (tanto en el swagger como en el curl dentro del sistema)

Pero en Swagger podes ver la definicion al menos?

Si, pero no lanza ningún error.
Ok, entonces no seria un fatal en ppio.
No tengo este archivo que me indicas, se activa de alguna forma?

En gral se utiliza la misma definicion de error del proyecto, con lo cual si el mismo no loguea a archivos… la parte REST tampoco lo hara, sino puede ser simplemente una cuestion de seleccionar un nivel mas alto de forma que aparezcan los mensajes de DEBUG.

Si, no modificamos nada. Es la que se instala con el composer.
Genial, Swagger deberia parsear correctamente el json entonces

Saludos

Una cuestion a revisar seria si estan usando el "hidratador" en el armado de la respuesta del servicio, quizas no se este reconociendo el modelo y por ello la respuesta sea nula, podrian chequear tirando un var_dump() de los datos que deberian devolverse previo a eso?... como para ver si el problema radica alli.

Lo revisé y si, con el var_dump() veo los datos correctamente.

Pero en Swagger podes ver la definicion al menos?

No, en el swagger no puedo ver la definición incluso tras corregir los warnings que mencionaba.

Cuando llamo al Rest desde la aplicación el log de toba no devuelve nada extraño, pero al intentar entrar a la definicion del swagger del proyecto noté que el log de toba si devolvia un error. Al rastrearlo por el código vi que el toba error se lanza en /framework/php/nucreo/lib/toba_rest.php


if (isset($datos_ini_proyecto['proyecto']['api_major']) && isset($datos_ini_proyecto['proyecto']['api_minor'])) {
			$settings['api_version'] = "v{$datos_ini_proyecto['proyecto']['api_major']}.{$datos_ini_proyecto['proyecto']['api_minor']}";
			$settings['api_major'] = $datos_ini_proyecto['proyecto']['api_major'];
			$settings['api_minor'] = $datos_ini_proyecto['proyecto']['api_minor'];
		} else {
			throw new toba_error('No esta especificada la version de la API (major:minor)');
		}

Donde defino esas variables?

En el mismo archivo agregue:

toba::logger()->info($datos_ini_proyecto);

Y no, no estan.

Hola Romina,

Dichas entradas las definis en el archivo proyecto.ini dentro de la seccion perteneciente al proyecto deberia quedarte algo asi por ejemplo:


;Version del proyecto, debe ser formato x.y.z
version = 3.3.25
api_major = 1
api_minor = 0

No enganche por este lado ya que la invocacion por curl te devolvia algo vacio en lugar de un msg de error, mala mia podriamos haber ahorrado tiempo.

Saludos

Muchas Gracias! era ese detalle… Ya puedo entrar al Swagger y me trae datos consultando desde el Curl.

Saludos!