Inicio > Aplicación, Delphi, PHP, WebService > (1/5) Aplicación de acceso a datos (Introducción)

(1/5) Aplicación de acceso a datos (Introducción)

miércoles, 22 de enero de 2014 Dejar un comentario Ir a comentarios
Share Button

estructEsta entrada y las siguientes, como otras del blog, viene «provocada» por una inquietud o un problema con el que me he encontrado. A raíz de eso y de la necesidad de solventarlo ha surgido esta solución; Seguramente no es la única, y me gustaría que me propusierais otras diferentes (sobre el mismo escenario) si las tenéis. Espero esta que os propongo sea útil a otros programadores en situaciones similares.

Mi intención es dividir todo el proceso (por lo extenso) en varias entradas sucesivas. Os adjunto el «Roadmap» (que suena como muy serio  ;-D ) del proceso completo y a medida que vaya completando los pasos, iré actualizando los links en todas ellas.

“ROADMAP” DE LAS ENTRADAS

EL PROBLEMA:

Un cliente nos platea la necesidad de realizar un programa que cumpla con los siguientes requisitos, a nivel muy genérico.

  • El programa debe trabajar con un acceso a Base de Datos; Por ejemplo, podemos pensar en una agenda sencilla de trabajadores –Nombre, apellidos, teléfono interno, móvil, extensión interna, email, departamento,…
  • El programa debe funcionar desde varios centros/oficinas que tiene la Empresa (sucursales diferentes en localización geográfica diferente) con una Base de Datos común.
  • Los diferentes centros no están conectados mediante red interna o VPN, aunque todos ellos están conectados a Internet.
  • Los centros no disponen de servidores propios con acceso desde el exterior (Internet).
  • Adicionalmente, además de acceder desde los puestos de trabajo de las empresas, la Base de Datos se tiene que poder acceder desde dispositivos móviles mediante una aplicación con funcionalidades reducidas. Por ejemplo, los móviles de los comerciales, cuando están trabajando fuera de las oficinas.

La idea es intentar satisfacer las necesidades del cliente, utilizando dentro de lo posible las herramientas que conocemos, en mi caso Delphi y sin tener recursos ilimitados.

BUSCANDO SOLUCIONES…

BASE DE DATOS:

DataBase Lo primero que me planteo es dónde va a estar ubicada la Base de Datos. Está claro que los datos deben ser accesibles desde cualquier lugar a través de Internet (no red local), así que las únicas opciones que se me ocurren son:

  1. Servidor de Base de Datos en la Empresa (en uno de los centros) con acceso desde el exterior.
  2. Utilizar un Servidor en Internet. Disponemos en este caso de Servidores Windows/GNU Linux.

Dado que la primera opción parece costosa y no dispongo de ese hardware actualmente en la empresa, la opción (2) parece la más aceptable. En ese caso los servidores GNU Linux son los más extendidos y económicos, así que optaré también por esa opción. Como Base de Datos usaré MySQL que es fácil de Instalar en todos los servidores (pensando en desarrollo y en futuros cambios) y es también una de las más extendidas en el escenario que he seleccionado.

APLICACIÓN CLIENTE:

Tal y como nos plantean los requisitos, la parte «cliente» de la aplicación puede ser de múltiples tipos (heterogénea). En este punto Delphi puede ayudarnos bastante, ya que con las versiones nuevas podemos compartir código entre aplicaciones de escritorio y aplicaciones móviles. Nos faltaría poder desarrollar aplicaciones web y ahí tendríamos que utilizar herramientas como HTML5 Builder.

Llegados a este punto, tengo un esquema como este:

Estructura

 

Si la Base de Datos se encuentra en un servidor de internet, normalmente no podremos acceder directamente a ella, pues los puertos no están abiertos por defecto, y por temas de seguridad no es habitual que se haga; La forma de acceder a la Base de Datos es haciéndolo desde el mismo servidor, de forma local. Así que para completar la estructura de nuestra aplicación necesitamos una «pieza» que nos haga este trabajo.
Como programador Delphi, si la máquina que vamos a utilizar como servidor fuera una «máquina Windows», no tendría más que generar un Servidor DataSnap que atendiera a mis peticiones, pero trabajando sobre el escenario en el que voy a usar un «Servidor GNU Linux», parece que nuestra solución para por crear un Servicio web.

Si el caso fuera utilizar un servidor Windows, os dejo un par de tutoriales de Egostar, donde está explicado paso a paso todo el proceso:

SERVIDOR WEB:

Para crear el Servidor web voy a utilizar PHP. Vamos a ver cómo es bastante sencillo crear uno aunque nuestros conocimientos de PHP sean muy básicos (como es mi caso). No se necesita mucho código y para un programador es bastante sencillo e intuitivo, la estructura y el funcionamiento. Hay paquetes y librerías PHP que nos pueden facilitar el trabajo, aunque veremos que para crear un Servicio básico no las necesitamos. A partir de aquí podemos ampliarlo con nuevos métodos y más funcionalidades.

Una vez decidida cual va a ser la estructura de nuestro proyecto, vamos a comenzar por crear la parte del Servidor Web. Los veremos paso a paso en la siguiente entrada:

(2/5) Generación del Webservice en PHP.

Como siempre cualquier sugerencia, comentario, crítica,… será bienvenido.

5/5 - (1 voto)
Subscribe
Notify of
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

10 Comments
Inline Feedbacks
Ver todos los comentarios
Eliseo GN
10 years ago

Me parece una serie de artículos muy interesante estimado Germán aunque tal vez un poco opacados por los turoriales que desarrollé y que amablemente has enlazado, ya son muy viejos y con la poca experiencia que tenía en ese momento, ya los veo muy básicos :D.

Prometo hacer algo más actual y corresponder con tu esfuerzo en éstos artículos :).

Saludos.

casimiro
casimiro
10 years ago

Muy interesante.
Me gustaría hacer una puntualización:
En la frase «En ese caso los servidores Unix son los más extendidos y económicos, así que optaré también por esa opción. »
Deberías cambiar Unix por Linux, ya que son Linux. Uno de los motivos principales por los que Torvalds creó Linux fue precisamente porque Unix es muy caro, actualmente pertenece a Novell. Así que creó Linux para ofrecer «un Unix» libre y económico.
Saludos

CLoayza
CLoayza
10 years ago

Muy buenos artículos, agradecer tu dedicación y esfuerzo.

Para ponerle un poco de pelos a la sopa te escribo algunos puntos a tener en consideración:

Fuente: https://www.debian.org/intro/about

1: «Linux es una pieza de software creada en un principio por Linus Torvalds y desarrollada por miles de programadores a lo largo del mundo».

2: «Las distribuciones Linux usan el nuclueo Linux.»

3: «Una gran parte de las herramientas básicas que completan el sistema operativo, vienen del proyecto GNU; de ahí los nombres: GNU/Linux»

Debido a lo anterior creo que debería ser :
«2. Utilizar un Servidor en Internet. Disponemos en este caso de Servidores Windows/GNU Linux.»

Saludos cordiales

iAldito
iAldito
9 years ago

Hola, muy buen ejemplo, me ha servido de mucho pero tengo una consulta, usando tu ejemplo he intantado enviar el mismo array al servidor para agregar usuarios, al hacerlo, me devuelve «Received content of invalid Content-Type setting: text/html – SOAP expects text/xml».
Cual puede ser el problema? como esta registrada la funcion de php? al enviar el array desde delphi hay q prepararlo de alguna manera especial o algo? muchas gracias!

iAldito
iAldito
9 years ago

@Germán Estévez
si lo he cambiado, por ejemplo en el servidor php tengo:

function AddArray($users = array()) {
$fields = $values = array();

foreach( array_keys($users) as $key ) {
$fields[] = «‘$key'»;
$values[] = «‘» . mysql_real_escape_string($data[$key]) . «‘»;
}

$fields = implode(«,», $fields);
$values = implode(«,», $values);

$conn = dbConnect();
$sql = «INSERT INTO `dbusers` ($fields) VALUES ($values)»;
$result = mysql_query($sql);
Projects.Update($id);

return $result;
}

$server->wsdl->addComplexType(
‘TUsers’, ‘complexType’, ‘struct’, ‘all’, »,
array(
‘id’ => array(‘name’ => ‘id’, ‘type’ => ‘xsd:integer’),
‘user’=>array(‘name’ => ‘user’, ‘type’ => ‘xsd:string’),
‘pass’=>array(‘name’ => ‘pass’, ‘type’ => ‘xsd:string’)
)
);

$server->wsdl->addComplexType(
‘TUsersArray’, ‘complexType’, ‘array’, ‘sequence’, ‘SOAP-ENC:Array’, array(),
array(
array(‘ref’ => ‘SOAP-ENC:arrayType’,
‘wsdl:arrayType’ => ‘tns:TUsers[]’
)
),
‘tns:TUsers’);

$server->register(«AddArray»,
array(‘users’ => ‘tns:TUsersArray’),
array(),
$ns,
false,
«rpc»,
«literal»,
«»);

pero al mandar el array por Delphi me manda dicho error :'(

iAldito
iAldito
9 years ago

creo q encontre la falla pero no se como resolverla,
me parece que el error esta al tratar de tomar los valores del array de estructura,
podrias decirme como lo hago?

como por ejemplo el msj anterior, desde delphi mando el array TUsersArray,
como hago en php para acceder a cada TUsers dentro de ese array y guardar el valor «user» en una variable?

muchas gracias!

10
0
Would love your thoughts, please comment.x
()
x