News & Events
Tutorial: Criando meu app step-by-step – DataSnap REST – Parte VI
Criando meu app step-by-step tem se tornado uma referência a muitos seguidores do blog, e nós agradecemos muito ;). Mas até o presente momento, estamos vendo coisas básicas no Delphi então é hora de avançarmos um pouco mais. Nessa sexta parte, iniciaremos a criação de um servidor de aplicativos desenvolvido com DataSnap REST, passando pelo conceito de Reflection no FireDAC no futuro, bem como o uso de objetos JSON para troca de DataSets entre cliente e servidor. Calma, calma! Para os iniciantes, tanto no Delphi quanto no DataSnap, isso pode parecer uma Hidra de Lerna, vulgarmente chamada de Bicho de Sete Cabeças. Mas não, será fácil.
No artigo anterior, nós aprendemos a criar uma janela de configurações utilizando arquivos INI para persistir as preferências do usuário, além de outras coisas. Confira:
- Instalação e configuração do Git no Delphi XE7;
- Como aplicar estilos mais profissionais?
- Criando uma janela de preferências;
- Criação de classe para guardar informações de preferências.
Nesta sexta parte, veremos como criar nosso servidor DataSnap e como configurar nossa aplicação cliente para ler nossos ServerMethods.
- Criação do servidor DataSnap;
- Criação do módulo de conexão com o servidor DataSnap;
- Teste de conexão.
Requisitos:
- Leitura: Leitura do artigo Parte V;
- Vídeo: Assistir ao vídeo complementar em nosso canal no YouTube;
Criando o servidor DataSnap REST
Antes de iniciarmos a criação de nosso servidor, precisamos entender exatamente o que faremos aqui. Atualmente temos somente uma tabela em nosso banco de dados local, TITULOS, que armazena os DVD’s que podemos alugar em nossa locadora. Possibilitamos o usuário final (administrador) fazer a inclusão, exclusão e alteração de titulos. Mas isso hoje fica somente no dispositivo móvel, o que é ruim. Nossa ideia inicial era que o aplicativo fosse apenas um sistema para uso do administrador da locadora, que poderia alugar, devolver ou ainda conferir quais itens estão emprestados.
A ideia agora é fazer com que possamos atualizar nosso servidor central com informações do que foi efetuado no mobile, bem como atualizar o mobile com informações dos títulos que estão no servidor central. Faremos isso com DataSnap.
No esquema da Figura 1, vemos como funcionará nosso sistema.
Figura 1. Esquema DataSnap
Note que nossa arquitetura prevê que nossos aplicativos móveis utilizarão internet para chegar ao servidor e consequentemente, chegar ao banco de dados.
Criando o servidor
Com o RAD Studio XE7 aberto e nosso projeto também já aberto na IDE, vamos adicionar um novo projeto clicando com o botão direito em ProjectGroup1 no Project Manager a nossa direita (Figura 2). Selecione Add New Project.
Figura 2. Criação do Projeto
Isso fará com que a janela de criação de novos projetos seja aberta pelo Delphi. Você precisará clicar em Delphi Projects > DataSnap Server e use o item DataSnap REST Application. Em seguida marque a opção Stand-alone application e Next. Aceite a opção default, VCL application e novamente em Next. A tela seguinte nos dá como sugestão a porta 8080. Essa será a porta que nosso aplicativo móvel (ou desktop) usará para se conectar com o servidor. Vamos usar essa porta mesmo, mas lembre-se se seu Windows precisará ter essa porta liberada no Firewall.
Passe a tela seguinte sem selecionar nenhuma opção adicional e em seguida use TDataMobule como classe para nossos ServerMethods. Isso fará com que o Delphi crie para nós um DataModule onde colocaremos nossos componentes de acesso a dados. Por fim selecione um caminho para salvar o código-fonte do servidor e clique em Finish. Como sugestão, criei uma pasta chamada DataSnapServer na raiz de nosso curso.
Entendendo o Servidor
Depois de clicar em Finish, o Delphi cria para nós todos os arquivos necessários e as respectivas configurações para que o servidor funcione corretamente em modo Stand-alone, ou seja, em modo executável. Você perceberá que temos três arquivos abertos:
- FormUnit1: Formulário principal do servidor;
- ServerMethodsUnit1: Servidor de Métodos;
- WebMobuleUnit1: Principal unit do servidor, possui os componentes que mantém o servidor no ar, tal como DSServer.
O primeiro formulário da lista, salve-o como UntMainServer.pas e dê o nome (Propriedade Name) a ele de frmMainServer. Em seguida salve o segundo formulário como UntServerMetodos.pas e dê o Name de SrvServerMetodos. Por fim salve o WebModuleUnit1 como UntWebModulo.pas e troque seu Name para webModulo.
Aproveitando que estamos no webModulo, vamos analisar esse formulário. O primeiro componente importante desse formulário é o DSServer1. É ele que recebe todas as requisições de aplicações cliente, sejam elas mobile, sejam elas desktop Windows ou Mac.
Em seguida nós temos um DSServerClass1. Esse componente é responsável por exportar as classe e consequentemente os métodos do servidor para o cliente. Podemos ter quantos componentes desse quisermos. Clique nesse componente e acesse seu evento OnGetClass. Teremos é seguinte código:
procedure TwebModulo.DSServerClass1GetClass( DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); begin PersistentClass := UntServerMetodos.TSrvServerMetodos; end;
Para sermos bem simplistas, estamos exportando a Unit ServerMetodos inteira para o cliente, o que significa que tudo que estiver programado lá dentro, será exportado e poderá ser acessado, como por exemplo nossos métodos de acesso a banco de dados.
Acesse agora a folha de código do ServerMetodos e localize a parte superior da unit onde encontramos os métodos ReverseString e EchoString. Esses dois métodos poderão ser acessados por nossos aplicativos móveis, bem como outros métodos que venhamos a codificar nessa área.
Para finalizar tudo, salve agora o projeto como DataSnapServer. Utilize a opção “File > Save Project As…“. Em seguida compile e execute nosso servidor utilizando Shift+Ctrl+F9 para rodar fora do modo Debug. Você verá que basta clicar no botão Start para que ele entre em ação e passe a “escutar” nossas requisições.
Aplicação Cliente
Agora aprenderemos apenas como fazer a configuração e conexão com nosso servidor de aplicativos DataSnap. Mantenha o servidor aberto para que possamos fazer as configurações.
#Dica: Clique com o botão direito do mouse em ProjectGroup1 no Project Manager e em seguida selecione Save Project Group As… para salvar o grupo de projetos.
Clique duas vezes em nosso projeto LodadoraDelphi.exe para que possamos selecionar o projeto Mobile. Nós precisaremos incluir uma nova Unit nesse projeto utilizando o menu File > New > Other > DataSnap Server e logo em seguida selecione o item DataSnap REST Client Module (Figura 3).
Figura 3. Criação do módulo cliente
Na primeira tela apenas escolha apenas Local server e avance. A tela seguinte que nos interessa. Nela escolhemos qual o tipo de projeto servidor queremos conectar. Com base em nossa escolha, o Delphi criará a Unit e os componentes necessários para acesso ao servidor de dados. Nesse caso temos as opções:
- DataSnap stand alone server: Servidor DataSnap stand-alone, nossa escolha;
- WebBroker and stand alone server: Servidores Web;
- IIS Module: Esse tipo de servidor funciona através do IIS no Windows, Internet Information Services;
- Apache module: Podemos ter nosso servidor DataSnap rodando sob plataforma Apache;
- Do not know: Desconhecido. Exige maior conhecimento das rotinas do servidor.
Escolheremos então, como mencionado, a primeira opção DataSnap stand alone server. Na tela seguinte, e última, nós podemos testar nossa conexão bem como modificar ou apenas informar a porta correta para conexão.
Depois de finalizado, nós teremos uma nova Unit que salvaremos como UntModuloCliente. E dê o nome a ele de ModuloCliente. Nós podemos ter quantos módulos cliente quisermos. Perceba que um único componente foi incluído nesse formulário. Esse componente, do tipo DSRestConnection, é o responsável por conectar-se com nosso servidor de aplicações. Clicando nele e observando suas propriedades, perceba que podemos a qualquer momento alterar a porta de conexão na propriedade Port.
Caso você deseje testar se a conexão funciona, basta clicar com o botão direito do mouse no DSRestConnection e selecionar Test Connection. Ainda com o botão direito, clique em Generate DataSnap client classes. Esse é principal segredo do DataSnap. Clicando nessa opção, uma nova Unit será gerada. Chamaremos essa Unit de Proxy, pois é o que ela faz. Esse proxy tem o objetivo de nos “linkar” com os métodos do servidor. É através dele que recebemos e enviamos parâmetros, datasets, etc entre cliente e servidor de aplicativos. Salve essa Unit com o nome que desejar, mas eu prefiro chamá-la simplesmente de Proxy.pas.
#Dica1: Sempre que uma nova função for criada, excluída, tiver seus parâmetros modificados ou ainda possuir novas classes para serem exportadas/importadas, utilize o botão direito do mouse e a opção Generate DataSnap client classes.
#Dica2: Na dica acima, apenas não se esqueça que o servidor precisa estar aberto e iniciado.
#Dica3: A Unit Proxy.pas NUNCA deve ser alterada manualmente. Não é necessário.
Figuras 4 e 5.
Figura 4. Escolhendo o tipo de servidor
Figura 5. Testando e finalizando a criação do Módulo Cliente
#Dica: Como nós alteramos os nomes das duas novas Units, ou seja, UntModuloCliente e Proxy, precisaremos também refazer a declaração dessas unidades que se enxergam. Para isso, acesse a seção Uses do UntModuloCliente e acrescente a unit Proxy. Compile o projeto. Um erro ocorrerá apontando para o nome antigo de nosso Proxy. Apenas apague-o. Nosso Uses ficará semelhante ao código abaixo:
uses System.SysUtils, System.Classes, Proxy, IPPeerClient, Datasnap.DSClientRest;
Testando o retorno de métodos
Pois bem, até aqui não digitamos uma só linha de código. Para finalizarmos nosso tutorial de hoje, faremos apenas um pequeno de teste para entendermos o primeiro conceito de acesso ao servidor de aplicativos.
Retorne ao frmMain, formulário principal de nossa aplicação mobile, e adicione um novo item de ListBox em nosso menu principal. Será provisório, apenas para testarmos. Aumente a altura desse novo item de modo que caibam 1(Um) Label, 1(Um) Edit e 1(Um) SpeedButton. Deseje nosso item semelhante a Figura 6.
Figura 6. Menu para teste
Antes de iniciarmos a codificação, precisamos fazer uso da Unit UntModuloCliente, por isso entre em File > Use Unit e selecione a unit informada. Não modifiquei o nome de nenhum componente.
No código do botão SpeedButton1 codifique como mostrado a seguir:
procedure TfrmMain.SpeedButton1Click(Sender: TObject); begin Edit1.Text := ModuloCliente.SrvServerMetodosClient.ReverseString(Edit1.Text); end;
Perceba como o código é simples. Abra a unit ModuloCliente e note que há uma propriedade chamada SrvServerMetodosClient, que nada mais é que uma referência a nossa classe TSrvServerMetodos no lado servidor. Através dessa propriedade conseguimos acesso ao método ReverseString. Passamos para ela o valor digitado no Edit1 e recebemos do servidor a String invertida que substitui o conteúdo do próprio Edit.
Esses são os passos e conceitos padrões para acesso ao servidor. No próximo tutorial, faremos a exportação de um TFDJSONDataSet do servidor para o cliente e com ele alimentaremos uma tabela temporária do lado cliente.
Para não avançarmos demais nessa sexta parte, finalizaremos aqui e continuaremos nosso desenvolvimento na parte VII.
#GoToDelphi
Conclusões
O uso de DataSnap é uma “mão a roda” para quem deseja separar sua aplicação em camadas. Aqui vimos que é perfeitamente possível efetuar chamadas ao servidor de aplicativos utilizando a porta 8080 e ler o retorno do servidor em aplicações mobile.
Nossa aplicação está preparada para funcionar também em Desktop Windows ou Mac apenas adicionando essas plataformas em nosso Project Manager, o que nos dá tranquilidade para migrar nossa app para “n” plataformas. Até a próxima!
Author: Adriano Santos
5 Comentários
Comments are closed.
[…] de servidores DataSnap com RAD Studio XE e FireDAC. Mencionei isso no post passado referente ao Tutorial: Criando meu app step-by-step – DataSnap – Parte VI quando disse que iríamos avançar um pouco mais em nosso tutorial. Pois bem, chegou a hora. Nessa […]
[…] #6 Creating A DataSnap Server Creation of server DataSnap; Creating the connection with the server module DataSnap; Connection test. […]
[…] Tutorial: Criando meu app step-by-step – DataSnap REST – Parte VI […]
[…] em detalhes quanto a criação do servidor DataSnap, se tiver dúvidas acompanhe nosso tutorial Criando meu app step-by-step (Aula VI) ou ainda no YouTube o Curso: Criando aplicativos móveis com Delphi (Aula 09) sobre o assunto. No […]
[…] Tutorial: Criando meu app step-by-step – DataSnap REST – Parte VI […]