Capítulo 1: Iniciando com DelphiMVCFramework
O que você vai aprender
DelphiMVCFramework, ou DMVCFramework (ou somente DMVC como a grande maioria dos usuários gostam de dizer) é um framework Delphi na qual permite criar um poderoso servidor RESTful e JSON-RPC sem esforço. No momento do lançamento deste livro o DMVCFramework é o projeto Delphi mais popular de código-aberto no Github com a maior comunidade. Muitos usuários relataram que mudaram de produtos comerciais para DMVCFramework e obtiveram um ciclo de desenvolvimento simples, desempenho superior e maior flexibilidade.
Você pode criar um servidor RESTful com sinalização completa em apenas alguns cliques, e pronto. Como você imagina, à medida que você cria uma solução da web totalmente sinalizada, precisa trabalhar nesta para implementar sua própria lógica e regras, mas ter uma estrutura fácil de entender e rápida para personalizar e “hackear” é uma vantagem realmente superior. DMVCFramework foi pensado para ter uma alma dupla (rapidez e simplicidade) e na sua 3ª versão penso que quase atingimos esta meta. Sugiro que se inscreva no grupo dedicado do Facebook que, no momento em que escrevo, tem mais de 3400 usuários ativos.
DMVCFramework com “baterias incluídas”
DMVCFramework é composto por uma série de unidades e sub frameworks que funcionam em conjunto. Essa coleção de módulos torna alguns conjuntos de tarefas dentro de um domínio de problema específico mais simples de implementar. No entanto, algumas partes do DMVC não estão vinculadas à estrutura em si e também podem operar em um aplicativo (ou app) diferente de um projeto DMVCFramework.
Nesse manual você vai aprender sobre os seguintes sub-projetos DMVCFramework:
- MVCActiveRecord
- LoggerPro (também disponibilizado como projeto separado)
- Framework de Serialização/deserialização
- Sub-sistemas de Authenticação/Authorização
- Compiladores RQL
- Cache multi threaded
Outra boa notícia para os novos usuários do DMVCFramework está relacionada a um dos recursos mais poderosos disponíveis: o middleware. Como você aprenderá, o middleware permite estender e customizar o comportamento padrão do DMVCFramework.
Instalando DelphiMVCFramework 3.2.1-carbon
DMVCFramework é lançado como release do Github, que é um arquivo zip simples para que você possa usar e atualizar cada versão de uma forma muito simples.
O procedimento de instalação segue a baixo:
- Acesse https://github.com/danieleteti/delphimvcframework/releases e clique em Latest release.
- Role até a seção What’s New e abra o grupo Asset.
- Aqui você irá encontrar 4 arquivos para baixar:
- DMVCFramework-[versão].zip (contém a release DMVCFramework do código-fonte - este é o arquivo para baixar)
- DMVCFramework-[versão]_samples.zip (contém todas as amostras - baixa para como referencia)
- Código-fonte(zip) (automaticamente gerada pela plataforma Github, não baixe)
- Código-fonte(tar.gz) (automaticamente gerada pela plataforma Github, não baixe)
- Descompacte o arquivo DMVCFramework-[versão].zip na pasta C:\DelphiLibs\DMVCFramework (ou naquela de sua preferência). Daqui em diante iremos indicar essa pasta como $(dmvchome);
- Abra o RAD Studio e abra
$(dmvchome)\packages\d104\DMVCFramework_group.groupprojou o projeto seja respectivo a sua versão de IDE;-
d104menciona “Delphi 10.4 Sydney” -
d103menciona “Delphi 10.3 Rio” -
d102menciona “Delphi 10.2 Tokyo” -
d101menciona “Delphi 10.1 Berlin” -
d100menciona “Delphi 10.0 Seattle”
-
- Faça o build de todos os projetos;
- Instale
DMVCFrameworkDT104selecione o projeto no Project Manager e comClick com botão direito->Installdo menu como mostra na próxima imagem.
Installing DMVCFramework - Pronto, basta fechar o projeto;
DMVCFramework funciona também com Delphi Professional e a versão livre Delphi Community (na qual está alinhada com a edição Professional).
AVISO! No caso de haver a edição Delphi Professional ou Community não se pode instalar a IDE expert por causa da falta de pacotes requeridos, mas você ainda pode utilizar o framework. Isso só acontece com algumas versões do Delphi, mas em tais casos você pode aprender como criar um projeto DelphiMVCFramework manualmente ou apenas copiar um projeto de amostra e modificá-lo.
Agora, DMVCFramework está instalado e a próxima etapa antes de criar seu primeiro projeto é configurar os caminhos da biblioteca.
Vá até Tools->Options->Language->Delphi->Library->Library Path e adicione os seguintes diretórios:
1 $(dmvchome)\sources
2 $(dmvchome)\lib\dmustache
3 $(dmvchome)\lib\loggerpro
4 $(dmvchome)\lib\swagdoc\Source
Clique em OK e feche a caixa de diálogo. Agora, estamos prontos para criar nosso primeiro serviço RESTful incrível!
Seu primeiro servidor RESTful com DelphiMVCFramework
Criando o primeiro serviço RESTful com DelphiMVCFramework é simples.
- Vá até o menu
File->New->Other; - Na caixa de diálogo, selecione
Delphi->DMVCFramework->Delphi MVC Framework Projectcomo mostrado a baixo;
- Clique
OKe você verá a tela seguinte (sua versão poderá ser um pouco diferente da imagem relacionada a baixo);
- Mantenha todas as opções padrão de configuração e clique em
OK. - Como pode ver, um projeto “limpo” DMVCFramework será exibido com:
- Uma unit web module (na qual contém a instância
TMVCEngine) - Uma unit controller (na qual contém o primeiro controller da nossa aplicação)
- Uma unit web module (na qual contém a instância
- Salve a unit web module como
WebModuleU.pas, o controller comoMyControllerU.pase o projeto comoMyFirstDMVCService.dproj. - Compilando o projeto você terá alguns erros por causa do assistente usado por nome padrão para o controller, que mudamos no paço anterior. Na seção de implementation troque o nome errado (ex.
Unit2) comoMyControllerU(ou o com qual nome salvou) que define o controller. Salve e recompile. - Rode o projeto usando o botão
Runou pela teclaF9e obterá a seguinte imagem:
- Sim! O console DMVCFramework padrão da aplicação está rodando e servindo seu primeiro servidor DMVCFramework. Simples, não?
Agora, façamos as honras tradicionais com um “Hello World”…
“Hello World” ao estilo DMVCFramework
- Crie um novo projeto DMVCFramework usando o assistente de projeto, remova todos os chics do grupo
Controller Unit Optionscomo a baixo.
- Clique
OKe salve o projeto comoMyDMVCHelloWorld.dproj, salve o WebModule comoWebModuleU.pase o controller comoMyControllerU.pas. - Abra a unit controller
- Como pode ver, agora a unit não possui todos os arquivos gerados pelo assistente de projetos como visto no primeiro projeto que fizemos. É uma ótima oportunidade para adicionar somente o que realmente precisamos.
- Na declaração da classe controller adicione um método de tipo
procedurecom nomeIndex(somente métodos de tipoprocedurepodem ser invocados pelo router DMVCFramework, então não é necessário ter métodos do tipofunction) cliqueCtrl+Shift+Cpara auto-completar sua classe com a implementação do métodoIndex. - No método
Indexescreva o seguinte código
1 procedure TMyController.Index;
2 begin
3 Render('Hello DMVCFramework World! It''s ' + TimeToStr(Now) +
4 ' in DMVCFramework-Land');
5 end;
OK, definimos o método e sua implementação. No entanto, o mecanismo ainda não sabe como chamá-lo porque Index é apenas um método, e não uma ação DMVCFramework adequada. Para transformar um método simples em uma ação, temos que instrumentá-lo com o atributo MVCPath (veremos ` MVCPath` e todos os outros atributos no próximo capítulo). Então, vá na declaração da classe e altere a declaração do método conforme mostrado logo abaixo.
1 type
2 [MVCPath('/api')]
3 TMyController = class(TMVCController)
4 public
5 [MVCPath('/hello')]
6 procedure Index;
7 end;
- Rode o programa e abra o navegador (Iremos usar o Chrome nos nossos exemplos)
- Na barra de endereços do navegador escreva
http://localhost:8080/api/helloaperte enter. Será exibido algo referente a imagem a baixo.
Parabéns! Você acabou de escrever sua aplicação Hello World feita com DMVCFramework!
Ações de sistema Built-in
Nosso pequeno exemplo Hello World já contém algumas características interessantes chamadas System Actions. Pronto, todo projeto DMVCFramework sempre conterá embutido um TMVCSystemController automaticamente registrado. Este controller entrega algumas informações bastante úteis. Todos os system actions são invocáveis somente via localhost e você pode decidir remover completamente o controller de sistema (verifique o Capítulo 13: Dicas e truques). Todas os System Actions provém somente respostas JSON - outros formatos não são suportados até o momento.
Ações de Sistema: describeplatform
Rode o projeto do servidor hello world e abra o navegador.
Se digitar http://localhost:8080/system/describeplatform.info vai obter o seguinte.
Esta ação entrega informações sobre a máquina do servidor. Esta informação pode ser útil quando se deseja verificar se o serviços está rodando.
System Actions: serverconfig
Rode o projeto do servidor hello world e abra o navegador.
Se digitar http://localhost:8080/system/serverconfig.info vai obter o seguinte.
Esta ação fornece informações sobre o mecanismo DMVCFramework e sua configuração. Pode ser útil para obter toda a configuração atual da instância TMVCEngine que roda dentro do servidor.
Tome cuidado com essas informações porque um invasor pode obter informações importantes delas. Verifique as dicas no capítulo “Como” para saber como desabilitar o registro dos controladores do sistema em seus servidores de produção.
System Actions: describeserver
Esta é a ação mais importante do System Action. Rode o servidor “hello world” e abra o navegador.
Se digitar http://localhost:8080/system/describeserver.info vai obter o seguinte
Esta ação fornece todas as informações referentes ao controllers e a ações providas por cada controllers. Como pode ver, o nosso controller Hello World chamadosTMyController está declarado na unit MyControllerU.pas. Além disso, a ação endpoint /system/describeserver.info exibe todas as informações precisas das chamadas das API’s, portanto, é uma ferramenta muito valiosa para entender o que seu servidor é capaz de fazer. Se você precisar fornecer documentação sobre suas APIs, o documento pode ser gerado lendo a saída desta ação, que é JSON padrão.
DMVCFramework também suporta a especificação OpenAPI (antigo Swagger) por meio de um middleware. A especificação cria uma interface RESTful de fácil desenvolvimento e consumo de uma API, mapeando efetivamente todos os recursos e operações associados a ela.
O que vêm por ai
Neste capítulo, vimos como criar um projeto DMVCFramework e como gerar alguns tipos de saída. Além disso, vimos o que são as Ações de Sistema(System Actions) e quando podem ser úteis. Mesmo o aplicativo DMVCFramework mais simples contém muitas funcionalidades prontas para serem usadas. Exploraremos cada um deles nos próximos capítulos. Agora você pode seguir o resto do manual para aprender todas as coisas interessantes sobre DMVCFramework.