DelphiMVCFramework (pt-BR)
DelphiMVCFramework - o guia oficial
DANIELE TETI
Esse livro está à venda em http://leanpub.com/delphimvcframework-br
Essa versão foi publicada em 2020-10-10
Esse é um livro Leanpub. A Leanpub dá poderes aos autores e editores a partir do processo de
Publicação Lean. Publicação Lean é a ação de publicar um ebook em desenvolvimento com
ferramentas leves e muitas iterações para conseguir feedbacks dos leitores, pivotar até que você
tenha o livro ideal e então conseguir tração.
© 2020 DANIELE TETI
Outras Obras De DANIELE TETI
DelphiMVCFramework
Para minha amada esposa Debora e nosso filho Mattia.
Conteúdo
Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
O que é Delphi MVC Framework, e por que isso importa? . . . . . . . . . . . . . . . . . . . . 3
Revisores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Traduções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
O que os usuários dizem sobre DMVCFramework . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Obtendo o código do livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Rodando o código do livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Notas de lançamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Capítulo 1: Iniciando com DelphiMVCFramework . . . . . . . . . . . . . . . . . . . . . . . . . . 11
O que você vai aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
DMVCFramework com “baterias incluídas” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Instalando DelphiMVCFramework 3.2.1-carbon . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Seu primeiro servidor RESTful com DelphiMVCFramework . . . . . . . . . . . . . . . . . . . 14
“Hello World” ao estilo DMVCFramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Ações de sistema Built-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
O que vêm por ai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Capítulo 2: Controllers e roteamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
O Roteamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Atributo MVCPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Manipulando Parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Parâmetros de string de consulta (Query-string) . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Parâmetros de mapeamento de URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Partes multiplas para uma Single Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Mais a respeito de parâmetros de mapeamento de URL . . . . . . . . . . . . . . . . . . . . . . 24
Ações fortemente tipadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Atributo MVCHTTPMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Atributo MVCProduces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Atributo MVCConsumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
CONTEÚDO
Atributo MVCDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Filtros de Ação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
O que vêm por ai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Capítulo 3: Renderizadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
A fase de Renderização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Renderizar Dados Deve Ser Simples! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Renderizando Objetos e Lista de Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Serialização Customizada de Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Renderizando descendentes de TStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Renderizando Objetos Aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Serializando descendentes TDataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Renderização de Dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Renderização de imagens, pdf e outros conteúdos binários . . . . . . . . . . . . . . . . . . . . 27
Renderizando Exceções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Renderizando Estrutura de Dados Customizados . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Suporte a HATEOAS em suas API’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Desserialização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Desserializar Objetos Simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Desserializiando Lista de Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Desserializando Estruturas Hierarquicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A interface IMVCList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Enviando Conteúdos Binários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Usando multipart/form-data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Serializadores de Tipo Personalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Usando serializador personalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
O que vêm por ai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Capítulo 4: Sistema de Biblioteca Municipal - O Banco de Dados . . . . . . . . . . . . . . . . 30
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Sistema de Biblioteca Municipal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
O Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Capítulo 5: Sistema de Biblioteca Municipal - As APIs . . . . . . . . . . . . . . . . . . . . . . . 31
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Visão geral do design de APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Projete uma API para o sistema de empréstimo de livros . . . . . . . . . . . . . . . . . . . . . 31
A APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Capítulo 6: Sistema de biblioteca municipal - Criação de APIs usando datasets . . . . . . . 33
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
CONTEÚDO
O acrônimo CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Implementando a API usando datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Capítulo 7: Sistema de Biblioteca Municipal - Criando APIs com MVCActiveRecord . . . . 35
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Design Padrão do ActiveRecord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
ActiveRecord em MVCFramework também chamado de MVCActiveRecord . . . . . . . . . 35
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Capítulo 8: Sistema de Biblioteca Municipal - APIs completas com MVCActiveRecord . . 38
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Configurando o WebModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Estabelecendo uma conexão com o Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . 38
TAuthorsController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
TControllerBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Tratamento de paginação em TCustomersController.GetCustomers . . . . . . . . . . . . . . 39
Efetuando a baixa de um empréstimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Gestão de usuários com TUsersController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
O vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Capítulo 9: Autênticação & Autorização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Autênticação vs Autorização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
O Subsistema de Autênticação/Autorização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Deixando Seguro uma API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Autenticação do tipo HTTP Basic Authentication . . . . . . . . . . . . . . . . . . . . . . . . . 41
JSON Web Token (também chamado de JWT) Autenticação e Autorização . . . . . . . . . . 41
Acesso às informações do usuário registrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Capítolos 10: Middlewares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
O que é middleware? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Interface IMVCMiddleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Middleware integrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Middleware CORS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Middleware de Compactação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Middleware Analítico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Middleware de Rastreamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Middleware para arquivos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Capítulo 11: Sistema de Biblioteca Municipal - Autenticação e Authrização . . . . . . . . . 46
CONTEÚDO
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Como escolher um esquema de autenticação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Definindo um sistema de responsabilidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Crie um cliente Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Capítulo 12: JSON-RPC: por que, quando e como usar . . . . . . . . . . . . . . . . . . . . . . . 48
O quê você irá aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Visão Geral do JSON-RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Requisições JSON-RPC 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Notificações JSON-RPC 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Objeto Error de Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
JSON-RPC vs REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Publicando PODOs(Objeto Delphi Antigo Simples) . . . . . . . . . . . . . . . . . . . . . . . . 49
O Atributo MVCInheritable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Inspecionando os métodos publicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Definindo Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
O que vêm por aí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Capítulo 13: Dicas e Truques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #1: Redirecionando usuários para um URL diferente apenas quando estiverem
usando o navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #2: Não carregue controllers de sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #3: Remova o cabeçalho X-Powered-By . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #4: Altere ou remova o cabeçalho do Servidor . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #5: Testando API usando Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Dica #6: Armazenando senhas de usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Prefácio
Escrito por Jim McKeeth
Chief Developer Advocate & Engineer
Embarcadero Technologies
Todos conhecem que Delphi é a melhor solução para conexões de banco de dados e construir aplica-
ções móveis e desktop. O Delphi MVC Framework (DMVCFramework) traz a incrível produtividade
do Delphi para a web!
O DMVCFramework é baseado no módulo WebBroker do Delphi, que foi introduzido no Delphi 3
em 1997. Muita coisa mudou desde que o WebBroker apareceu pela primeira vez, tanto no Delphi
quanto na web.
A Primeira Guerra dos Navegadores da Web começou em 1997. A Microsoft acaba de lançar o
Internet Explorer versão 4 deixando um logotipo com a letra “e” de três metros de altura no gramado
da frente da Netscape, com um cartaz “Da equipe do IE … Nós Amamos Você”. Depois que os
funcionários da Netscape o derrubaram, eles retribuíram o favor com um mascote do dinossauro
Mozilla segurando uma placa que dizia “Netscape 72, Microsoft 18”, a participação no mercado
de navegadores na época. Opera, Cyberdog da Apple, Lynx o navegador somente texto e outros
representavam os 10% restantes.
Conforme a evolução da web, vemos o surgimento de serviços da web XML e SOAP. Tanto o
XML (Extensible Markup Language) como o HTML (HyperText Markup Language) são baseados
na Standard General Markup Language (SGML), que é a origem dos colchetes angulares. SOAP
é o protocolo de acesso à objetos simples que permitia chamadas de procedimento remoto (RPC)
e prometia uma coleção descentralizada de serviços remotos facilmente invocados por meio de
solicitações da web.
Delphi obteve seus serviços da Web SOAP baseados em XML no Delphi 6 de 2001. Ele adicionou a
capacidade de construir servidores XML SOAP e consumir serviços XML SOAP existentes, mesmo
aqueles construídos com outras ferramentas. Contribuí com um capítulo para um livro sobre a
construção de um cliente SOAP baseado na web que consumia um .NET SOAP Services. Era usado
o Kylix para implantar o servidor web Delphi no Linux.
O SOAP nunca realizou seu sonho de revolucionar a forma como os serviços eram chamados,
recebendo apenas adoção limitada. As coisas mudaram novamente quando Roy Fielding introduziu
o termo transferência de estado representacional (REST) em sua dissertação de doutorado. Onde o
XML SOAP era um protocolo oficialmente adotado de peso, o novo desafiante REST era leve e vago.
Realmente mais uma recomendação descritiva.
Prefácio 2
REST é construído na simplicidade do protocolo HTTP. Isso permite que um navegador da web
comum visualize um endpoint REST simples. Os dados resultantes são tipicamente em JSON
(JavaScript Object Notation composto de chaves), tendo os dados retornados.
Mais adiante, um serviço é considerado RESTful se este encontra a seguinte restrições de
1. Interface uniforme - REST faz uso dos Locadores de Recursos Uniforme (URL) padrão da web
para definir endpoints como a interface REST.
2. Cliente–servidor - Este é a respeito da separação de todos interesses e escalabilidade melho-
rada que vem junto. O armazenamento de dados e a interface de usuário são desacopladas e
permitem evolução independente.
3. Sem estado - Isso requer que cada solicitação deve conter todas as informações necessárias e
não pode tirar proveito de qualquer estado armazenado. Portanto, duas solicitações idênticas
produzirão a mesma resposta idêntica. Isso permite maior escalabilidade horizontal do servidor.
Muitas implementações de descanso permitem que um token de autenticação mantenha uma
sessão, mas além disso, é importante que a ordem das solicitações não afete os resultados.
4. Cacheável - Como não possui estado, é facilmente armazenável em cache. Se você solicitar
uma página específica de dados, a mesma solicitação sempre retornará os mesmos resultados
(até que os dados sejam alterados). Um sistema não-cacheável pode fornecer automaticamente
a próxima página em solicitações futuras, mas também não seria sem estado.
5. Sistema de camadas - É daí que vem o termo popular “microsserviços”, com a ideia de que uma
arquitetura de serviço RESTful é feita de várias camadas de serviços REST, cada uma ciente
apenas de suas camadas vizinhas.
Finalmente, com REST, vemos a realização de uma arquitetura de serviços da web distribuída e
aberta. Quase todo site que oferece um serviço o torna disponível por meio de uma API RESTful.
Prefácio 3
O que é Delphi MVC Framework, e por que isso
importa?
Figure 1
Prefácio 4
MVC é um padrão de design sobre desacoplamento do Modelo, View, Controller para tornar mais
fácil construir um aplicativo onde a interface do usuário (view) é independente dos dados (model)
e funcionalidade (controller). Isso torna mais fácil criar um aplicativo multicamadas com várias
interfaces de usuário: web, móvel, desktop, etc.; que todos usam o mesmo back-end. O usuário
observa a view, interage com o controller, que manipula o modelo, atualizando a view.(Veja a figura
1)
Com o DMVCFramework, isso é expresso como um serviço da web baseado em REST. O controller
é composto de endpoints REST que fornece a funcionalidade para manipular o modelo ou dados
(geralmente um banco de dados, mas nem sempre), então a view são os endpoints REST que fornecem
os dados ao usuário. A vantagem desse padrão desacoplado é que a view é implementada tão
facilmente por meio de uma página da web quanto por meio de um aplicativo móvel ou desktop.
Todos eles apenas chamam os endpoints REST.
DMVCFramework é um dos frameworks mais populares para construir aplicações web com Delphi.
Inclui suporte total de APIs RESTful (RMM Nível 3) JSON-RPC 2.0 tornando a construção e
publicação o mais simples e flexível possível. Não é a única solução de servidor REST para Delphi e
isso é uma das coisas que amo no Delphi: a variedade e opções disponíveis para o usuário final.
Se alguém me perguntasse qual REST Framework escolher, eu sempre diria que depende de sua
implementação e requisitos, mas se você é novo na construção de uma solução de servidor REST, o
DMVCFramework é um ótimo lugar para começar. Como um projeto de código aberto, a barreira de
entrada não poderia ser menor, especialmente com a disponibilidade deste livro. Você pode descobrir
que é a solução perfeita para você.
-Jim McKeeth
Chief Developer Advocate & Engineer
Embarcadero Technologies
[email protected]
[^Figure 1]: RegisFrey; Own work, Public Domain; https://commons.wikimedia.org/wiki/File:MVC-
Process.svg
Revisores
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Traduções
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que os usuários dizem sobre
DMVCFramework
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Obtendo o código do livro
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Rodando o código do livro
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Notas de lançamento
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
2020-08-31 - 1a edição, update 1
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
2020-09-15 - 1a edição, update 2
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
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
Capítulo 1: Iniciando com DelphiMVCFramework 12
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.groupproj ou
o projeto seja respectivo a sua versão de IDE;
– d104 menciona “Delphi 10.4 Sydney”
– d103 menciona “Delphi 10.3 Rio”
– d102 menciona “Delphi 10.2 Tokyo”
– d101 menciona “Delphi 10.1 Berlin”
– d100 menciona “Delphi 10.0 Seattle”
• Faça o build de todos os projetos;
• Instale DMVCFrameworkDT104 selecione o projeto no Project Manager e com Click com botão
direito->Install do menu como mostra na próxima imagem.
Capítulo 1: Iniciando com DelphiMVCFramework 13
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 dire-
tórios:
Capítulo 1: Iniciando com DelphiMVCFramework 14
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 Project como
mostrado a baixo;
Capítulo 1: Iniciando com DelphiMVCFramework 15
• Clique OK e você verá a tela seguinte (sua versão poderá ser um pouco diferente da imagem
relacionada a baixo);
The DMVCFramework Wizard
• 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)
• Salve a unit web module como WebModuleU.pas, o controller como MyControllerU.pas e o
projeto como MyFirstDMVCService.dproj.
Capítulo 1: Iniciando com DelphiMVCFramework 16
• 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) como MyControllerU (ou o com qual nome salvou) que define o controller.
Salve e recompile.
• Rode o projeto usando o botão Run ou pela tecla F9 e 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 Options como a baixo.
Capítulo 1: Iniciando com DelphiMVCFramework 17
• Clique OK e salve o projeto como MyDMVCHelloWorld.dproj, salve o WebModule como WebModuleU.pas
e o controller como MyControllerU.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 procedure com nome Index
(somente métodos de tipo procedure podem ser invocados pelo router DMVCFramework, então
não é necessário ter métodos do tipo function) clique Ctrl+Shift+C para auto-completar sua
classe com a implementação do método Index .
Capítulo 1: Iniciando com DelphiMVCFramework 18
• No método Index escreva 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/hello aperte 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 Sys-
tem Actions. Pronto, todo projeto DMVCFramework sempre conterá embutido um TMVCSystemController
Capítulo 1: Iniciando com DelphiMVCFramework 19
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.
Capítulo 1: Iniciando com DelphiMVCFramework 20
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 impor-
tantes 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
Capítulo 1: Iniciando com DelphiMVCFramework 21
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.
Capítulo 1: Iniciando com DelphiMVCFramework 22
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.
Capítulo 2: Controllers e roteamento
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O Roteamento
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atributo MVCPath
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Manipulando Parâmetros
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Parâmetros de string de consulta (Query-string)
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Parâmetros de mapeamento de URL
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Partes multiplas para uma Single Action
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 2: Controllers e roteamento 24
Mais a respeito de parâmetros de mapeamento de URL
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Ações fortemente tipadas
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atributo MVCHTTPMethod
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atributo MVCProduces
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atributo MVCConsumes
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atributo MVCDoc
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Filtros de Ação
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 2: Controllers e roteamento 25
Finalização e Inicialização de Controller
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Resumo do ciclo de vida do controller
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por ai
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 3: Renderizadores
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
A fase de Renderização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderizar Dados Deve Ser Simples!
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderizando Objetos e Lista de Objetos
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Serialização Customizada de Objetos
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Alterar as propriedades
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 3: Renderizadores 27
Customizando os nomes das propriedades
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Escondendo propriedades
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderizando descendentes de TStream
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderizando Objetos Aninhados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Serializando descendentes TDataset
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderização de Dicionários
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderização de imagens, pdf e outros conteúdos
binários
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 3: Renderizadores 28
Renderizando Exceções
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Renderizando Estrutura de Dados Customizados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Suporte a HATEOAS em suas API’s
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Desserialização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Desserializar Objetos Simples
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Desserializiando Lista de Objetos
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Desserializando Estruturas Hierarquicas
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 3: Renderizadores 29
Atributo MVCListOf
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
A interface IMVCList
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Enviando Conteúdos Binários
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Usando multipart/form-data
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Serializadores de Tipo Personalizado
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Escrevendo um serializador customizado para TUserRoles
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Usando serializador personalizado
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por ai
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 4: Sistema de Biblioteca
Municipal - O Banco de Dados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Sistema de Biblioteca Municipal
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O Banco de Dados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 5: Sistema de Biblioteca
Municipal - As APIs
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Visão geral do design de APIs
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Usando substantivos para representar recursos
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Consistência de Nomenclatura
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Projete uma API para o sistema de empréstimo de
livros
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 5: Sistema de Biblioteca Municipal - As APIs 32
A APIs
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 6: Sistema de biblioteca
municipal - Criação de APIs usando
datasets
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O acrônimo CRUD
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Implementando a API usando datasets
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Adicionando um TDatamodule
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Removendo Datasets em Design Time
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 6: Sistema de biblioteca municipal - Criação de APIs usando datasets 34
Recuperando lista de clientes
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Recuperando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Complete a API de clientes por meio de um CRUD
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Criando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Considerações sobre a Versão 1 da Biblioteca Municipal
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 7: Sistema de Biblioteca
Municipal - Criando APIs com
MVCActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Design Padrão do ActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
ActiveRecord em MVCFramework também chamado
de MVCActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Introdução à TMVCActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Implementando APIs usando MVCActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 7: Sistema de Biblioteca Municipal - Criando APIs com MVCActiveRecord 36
Definindo Entidades
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Recuperando uma lista de clientes
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Configurando a conexão TMVCActiveRecord usando filtros de
ação
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Configurando a conexão TMVCActiveRecord usando
TMVCActiveRecordMiddleware
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Configurando a conexão do FireDAC
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Código da Ação
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Recuperando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Criando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 7: Sistema de Biblioteca Municipal - Criando APIs com MVCActiveRecord 37
Atualizando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Variação para o verbo PUT
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Deletando um cliente
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Consideração sobre nossa API versão 2 da Biblioteca Municipal
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 8: Sistema de Biblioteca
Municipal - APIs completas com
MVCActiveRecord
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Configurando o WebModule
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Estabelecendo uma conexão com o Banco de Dados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Conheça ActiveRecordConnectionRegistry
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
TAuthorsController
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 8: Sistema de Biblioteca Municipal - APIs completas com MVCActiveRecord 39
TControllerBase
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Tratamento de paginação em
TCustomersController.GetCustomers
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Efetuando a baixa de um empréstimo
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Gestão de usuários com TUsersController
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Método CreateUser
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Conhecendo o atributo MVCEntityActions
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atualizar, Recuperar e Deletar um usuário
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 9: Autênticação &
Autorização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Autênticação vs Autorização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O Subsistema de Autênticação/Autorização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Interface IMVCAuthenticationHandler
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
OnRequest
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
OnAuthentication
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 9: Autênticação & Autorização 41
OnAuthorization
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Deixando Seguro uma API
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Implementando o exemplo do servidor API
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Autenticação do tipo HTTP Basic Authentication
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Implementando Autenticação HTTP BASIC
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Exemplo de um Client para Autenticação HTTP Basic
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
JSON Web Token (também chamado de JWT)
Autenticação e Autorização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Cabeçalho JWT
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 9: Autênticação & Autorização 42
Exemplo
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Payload JWT
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Implementando Autenticação JSON Web Token
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Exemplo com Client para autenticação JWT
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Acesso às informações do usuário registrado
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítolos 10: Middlewares
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que é middleware?
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Interface IMVCMiddleware
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Crie um middleware simples
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware integrados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware CORS
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítolos 10: Middlewares 44
Como usar
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware de Compactação
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Como usar
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware Analítico
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware de Rastreamento
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Como usar
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Middleware para arquivos estáticos
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítolos 10: Middlewares 45
Como usar
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Redirecionamento integrado para caminho não terminado
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 11: Sistema de Biblioteca
Municipal - Autenticação e
Authrização
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Como escolher um esquema de autenticação
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Definindo um sistema de responsabilidades
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Atualizar empréstimos com informações de usuário registradas
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Alterando a senha
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 11: Sistema de Biblioteca Municipal - Autenticação e Authrização 47
Evitando deletar o usuário atual
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Crie um cliente Python
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 12: JSON-RPC: por que,
quando e como usar
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O quê você irá aprender
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Visão Geral do JSON-RPC
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Requisições JSON-RPC 2.0
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Notificações JSON-RPC 2.0
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Objeto Error de Respostas
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 12: JSON-RPC: por que, quando e como usar 49
JSON-RPC vs REST
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Publicando PODOs(Objeto Delphi Antigo Simples)
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Tipos de parâmetros
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O Atributo MVCInheritable
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Inspecionando os métodos publicados
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Definindo Hooks
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
O que vêm por aí
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 13: Dicas e Truques
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Dica #1: Redirecionando usuários para um URL
diferente apenas quando estiverem usando o
navegador
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Dica #2: Não carregue controllers de sistema
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Dica #3: Remova o cabeçalho X-Powered-By
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Dica #4: Altere ou remova o cabeçalho do Servidor
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Dica #5: Testando API usando Python
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Capítulo 13: Dicas e Truques 51
Dica #6: Armazenando senhas de usuários
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.
Sumário
This content is not available in the sample book. The book can be purchased on Leanpub at http:
//leanpub.com/delphimvcframework-br.