Crear Web Service desde Qt!
-
Quiero crear una app android desde Qt que se conecte al servidor de la base de datos postgresql desde cualquier lugar a traves de internet, sin embargo he visto que muchos recomiendan usar web service, mi pregunta es: Se puede usar en qt? Como lo puedo usar? Me podrian dar un ejemplo sencillo, gracias
-
El viejo debate de los años 90 entre usar aplicaciones de 2 capas (cliente robusto - servidor de BD) o aplicaciones de 3 capas (servidor de BD- servidor web- cliente flojo). El punto critico de estas discusiones eran la seguridad y la facilidad de instalación.
Se puede hacer de ambas formas ya que la comunicación a través de internet con la base de datos es a utilizando drivers en cualquiera de los dos casos.
Sí quieres usar un Web Service (en ese caso yo usaría php con Apache como servidor web por ser la opción más económica y fácil, pero existen otras variantes más costosas con java), el proveedor del servicio recibe la petición desde tu aplicación android o desde cualquier browser a través del formulario que le envíes vía URL con los métodos http, post o get, eso lo determina el servicio. El proveedor del servicio con los datos que recibe arma el query y se conecta vía driver a la Base de Datos la cual retorna una respuesta. El proveedor web toma esa respuesta que envía la Base da Datos y genera con ella un stream que antes era un XML y ahora son JSON que es el protocolo que se ha impuesto en los últimos años. Tu aplicación android lo que debería preocuparse es como tomar esa respuesta (XML o JSON) y mostrarla al usuario. Existen decenas de ejemplos en QML muy buenos sobre el manejo de XML y JSON, de hecho, en mi celular tengo el reporte del clima y el cliente de twitter que son ejemplos tomados de este site.
Si quieres usar 2 capas solamente (cliente robusto - servidor de BD) ya aquí en este site y en la mayoría de tutoriales de Qt hay también decenas de ejemplos de como conectarse y hacer query a BD, por supuesto que usando drivers de qt. Una vez que tengas el resultado de los query, esta la puedes almacenar en QList, o QStringList, lo que te sea más cómodo y luego eso usarlo en los QML para mostrarlo a los usuarios.
2 advertencias:
1 - al usar driver verifica en todo momento que exista la conexión a la base de datos y si hay fallas mostrarla al usuario (servidor caído, error de login o password, etc).
2 - Usar QML para las pantallas de android, no intentes hacer la aplicación de 2 capas con java ya que el Lanzador de aplicaciones (Launcher) que usa java en android se cuelga fácilmente, no así el lanzador de aplicaciones de QML.Suerte, y avísanos cualquier cosa. Así aprendemos todos.
-
Ya probé que funciona en mi tablet este ejemplo en QML (es lo que actualmente se usa para hacer aplicaciones de Android) http://doc.qt.io/qt-5/qtquickcontrols-calendar-example.html .
En este ejemplo la conexión es a una base de datos local SQLite pero cambiando el driver puedes hacer la conexión a cualquier otra base de datos en internet.
Recomendación: Haz las pruebas de conexión y drivers a tu base de datos aparte para asegurarte que funcionan antes de integrarlos al ejemplo.