SlideShare une entreprise Scribd logo
1  sur  37
Datasnap Avançado
Respostas para um Sistema Robusto
Kelver Merlotti
Kelver Merlotti
• Embarcadero MVP
• Coordenador editorial da Active Delphi
• Consultor independente
• Especialista em N-Tier e Mobile
• Trabalha com Delphi há +15 anos
• Contatos
• Email: kmerlotti@gmail.com
• Twitter: @kmerlotti
• Facebook: http://fb.com/kmerlotti2
Vamos falar sobre…
• Segurança com
Authentication;
Authorization; e
Transport Filters
• Performance com
Caching;
Rest Filters; e
• Responsidivade with
Callbacks
3
Authentication e Authorization
Diferença
• Authentication acontece quando “alguém” tenta acessar o servidor,
enquanto Authorization acontece quando “alguém” já logado em seu
servidor tenta usar algo dele. Dito isso:
• Não há como autorizar alguém ainda não autenticado
• Se está autenticado, ainda poderá não estar autorizado a fazer algo
5
Como autenticar
• TDSAuthenticationManager.onAuthenticate, que nos dá informações
como:
• O Protocolo sendo utilizado: http, https ou tcp
• O contexto sendo utilizado (http://server:port/context/something)
• O Usuário e Senha sendo utilizados
• Após testar as credenciais você pode decidir se a operação é válida ou não
e adicionar alguns papéis (roles) ao usuário que está se autenticando.
• Este papéis serão úteis logo mais, quando precisar decidir o que este
usuário pode ou não fazer.
6
Como autorizar
• Existem 3 formas de aprovar/rejeitar uma tentativa de executar algo em
seu servidor:
• Usando o atributo TRoleAuth em classes e métodos
• Menos flexível, mas requer praticamente nenhum código
• Usando a coleção TDSAuthenticationManager.Roles
• Útil com DataSetProvider’s e com muitas roles/profiles
• Pode requerer mais código
• Usando o evento TDSAuthenticationManager.onAuthorize
• Mais flexível, 100% codificado
• Importante: TDSAuthManager.Roles sobrescreverá qualquer atributo TRoleAuth!7
Authentication e Authorization na prática
8
Mais sobre Authentication e Authorization
• Authentication and Authorization (DocWiki)
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/Authentication_and_Authorization
• Secure DataSnap Development (CodeRage 8 Session Replay)
• http://www.youtube.com/watch?v=X1CW9A1bCzk
• Delphi Labs: DataSnap XE - Authentication and Authorization
• http://edn.embarcadero.com/article/41267
• Authentication and Authorization with DataSnap and REST
• https://mathewdelong.wordpress.com/2010/09/12/authentication-and-authorization-with-datasnap-and-rest/9
Transport Filters
Que filtro é esse?
• É um código a ser executado sobre os bytes que serão enviados e
recebidos pelas aplicações servidora e cliente.
• Delphi traz 3 filtros prontos para uso:
• 1 Filtro de Compactação, baseado em Zlib; e
• 2 Filtros de Criptografia, baseado em RSA e PC1
• Todos estes filtros tem efeito sobre TCP/IP e devem ser declarados em
ambos os lados, cliente e servidor.
• Filtros podem ser customizados, estendendo a classe
Data.DBXTransport.TTransportFilter
12
Transport Filter na prática
13
Mais sobre Transport Filters
• Filtering DataSnap Byte Stream (DocWiki)
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/Filtering_DataSnap_Byte_Stream
• Delphi Labs: DataSnap XE - Transport Filters
• http://edn.embarcadero.com/article/41293
• Secure DataSnap Development (CodeRage 8 Session Replay)
• http://www.youtube.com/watch?v=X1CW9A1bCzk
• DataSnap Filter Compendium
• http://www.danieleteti.it/datasnap-filters-compendium/14
Caching
Nada é mais rápido para processar do que
o que não precisa ser processado!
16
DataSnap REST Parameter Cache
• Em um servidor REST, quando um método retorna um ou mais tipos complexos
como Streams, ele pode responder ao cliente que estes dados estão em cache,
possibilitando este cliente requisitar os dados em cache. Tudo que você precisa é
definir o cabeçalho “Accept” da requisição como “application/rest”.
• Então o servidor responderá com algo como:
• {"result":["0/0/0"],"cacheId":0,"cmdIndex":0}
• Isto significa que agora você tem um Parâmetro com este cacheId armazenado em
sua sessão. Basta fazer uma nova requisição com o mesmo “dssession” para obter o
conteúdo. A URL é mais ou menos assim:
• http://host:port/datasnap/cache/0/0/017
“Cacheando” dados
• Fazer cache de dados é (quase) sempre uma boa ideia!
• Não é tão simples fazer, mas é muito valioso no ambiente de produção.
• Pode ser feito do lado servidor ou do lado cliente, que é preferível.
• Dados que não mudam com frequência são ótimos candidatos a estarem em cache,
como:
• Países, Estados, Cidades, Unidades de Medida, etc.
• É essencial ter um mecanismo de invalidação de cache, que depende do contexto,
mas normalmente é feito por:
• Tempo de vida, definindo a data e hora a expirar
• Mudança nos dados
• Usando um hash dos dados; ou
• Usando um controle de versão dos dados (InterBase Change Views é O CARA nisso!)18
Cache do lado cliente
• Sempre que possível, armazene dados do lado cliente!
• Evitará tráfego desnecessário com o Servidor de Aplicação e
consequentemente com Servidor de Banco de Dados
• Requer mais cuidado com a invalidação
• Considere utilizar:
• ClientDataSet’s;
• FDMemTable’s
• FireDAC LocalSQL
• Lembre-se: em muitos casos tentar sincronizar o cache pode ser perda de
tempo. Jogue-o fora e crie novamente.19
Cache do lado servidor
• Usado para evitar acesso desnecessário ao banco de dados
• Pode ser um cache único para todos os clientes ou um cache por cliente
• Pode-se usar a propriedade TDSServerClass.LifeCycle para gerenciar isso
• Server: Um único cache (que faz mais sentido, mas nem sempre possível)
• Session: Cada cliente terá seu próprio cache
20
Caching na prática
21
Mais sobre Caching
• DBX Parameter Caching
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/DBX_Parameter_Caching
• DataSnap REST Messaging Protocol - Session Parameter Caching
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/DataSnap_REST_Messaging
_Protocol#Session_Parameter_Caching
22
REST Request Filters
23
REST Request Filters
• Mais relacionado a REST do que Datasnap em si
Se não está familiarizado com REST, pode começar aqui: http://www.restapitutorial.com/
• Em resumo, servidores REST geralmente oferecem uma forma de “selecionar” do
resultado somente o pedaço que o cliente solicitou, ao invés de todo o conteúdo.
Isto é chamado REST Request Filters.
• São usados no final da URL, como:
…/metodo/parametro?filter.function=params
• Datasnap possui 2 filtros REST embutidos: SubString (ss) e Table (t).25
Filtro SubString
• Pode operar sobre Strings e seus caracteres ou sobre Streams e seus bytes
• Possui 3 funções:
• Count(c): único parâmetro, para definir os primeiros N caracteres desejados
• …?ss.c=1 retornará o primeiro caractere ou byte
• Offset(o): único parâmetro, para definir os primeiros N caracteres que deseja ignorar
• …?ss.o=10 retornará todo o conteúdo após o 10º caractere ou byte
• Range(r): dois parâmeteros, para definir o offset e o count
• …?ss.r=10,20 retornará o conteúdo a partir do 11º ao 30º caractere ou byte (Ignora 10, retorna 20)
26
Filtro Table
• Opera sobre Datasets, com as mesmas 3 funções do SubString, mas
filtrando registros ao invés de caracteres ou bytes
• Count(c): único parâmetro, para definir os primeiros N registros desejados
• …?t.c=1 retornará o primeiro registro
• Offset(o): único parâmetro, para definir os primeiros N registros que deseja ignorar
• …?t.o=10 retornará todos os registros após o 10º
• Range(r): dois parâmetros, para definir o offset e o count
• …?t.r=10,20 retornará os registros do 11º ao 30º (ignora 10, retorna 20)
27
REST Request Filters na prática
28
Mais sobre REST Request Filters
• Request Filters
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/Request_Filters
• DataSnap REST Messaging Protocol - Request Filters
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/DataSnap_REST_Messaging
_Protocol#Request_Filters
• REST Servers in Delphi XE using DataSnap
• http://www.embarcadero.com/br/rad-in-action/datasnap-rest
29
Callback
Callback: o que é?
Quando você liga para alguém, ele/ela pode te ligar de volta, certo?
E é isso que o servidor faz!
Se um cliente “liga” pra um servidor, este servidor pode
“ligar de voltar” para este cliente!
31
Ok, mas para que?
• Para dar ao servidor a possibilidade de “falar” com o cliente de forma
proativa!
• Quando um cliente solicita algo ao servidor, não sabe o que está acontecendo
lá até que recebe a resposta.
• Do outro lado, o servidor não sabe como dizer ao cliente o que está
acontecendo.
• Usar um callback permite ao servidor fazer isso!
32
Legal! Como?
• Usando um método de callback; ou
• Usando um canal de callback!
33
Callback na prática
34
Mais sobre Callback
• Using Callbacks
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_Callbacks
• REST Heavyweight Callbacks
• http://docwiki.embarcadero.com/RADStudio/Seattle/en/REST_Heavyweight_Callbacks
• Delphi Labs: DataSnap XE - Callbacks - Artigo e vídeos (parte 1, 2 e 3)
• http://edn.embarcadero.com/article/41374
• https://youtu.be/5zO3_g9Z-wc
• https://youtu.be/geEzwg8XX8k
• https://youtu.be/Hwode7a8O5k
• Heavyweight Callbacks (HTTP) with DataSnap - Artigo e vídeos (parte 1 e 2)
• https://mathewdelong.wordpress.com/2011/05/30/heavyweight-callbacks/
• https://youtu.be/IrweqUlENHU
• https://youtu.be/xVUAisxqW0U35
Para terminar…
• Explore os recursos do Datasnap! Eles estão lá para serem usados! E funcionam :)
• Veja os exemplos, leia a documentação. Estude!
• Wizards nunca darão os melhores resultados. Vá além!
• Sempre planeje seu servidor levando em consideração seu ambiente de produção. Até a
qualidade da rede deve ser considerada.
• Leia sobre pool de conexões de banco de dados e use-o!
• Leveza nunca é suficiente já que nosso objetivo é ser o mais rápido possível! Mas só
trabalho pesado pode trazer resultados leves! ;)36
http://fb.com/DelphiBrasil
http://fb.com/EmbarcaderoBR
http://www.embarcadero.com/mvp-directory
http://www.embarcaderobr.com.br/treinamentos/
Kelver Merlotti
kmerlotti@gmail.com | @kmerlotti | http://fb.com/kmerlotti

Contenu connexe

Tendances

BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47sifexol
 
10 doutrina cristã acerca do diabo
10   doutrina cristã acerca do diabo10   doutrina cristã acerca do diabo
10 doutrina cristã acerca do diaboLuiz Ferreira
 
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)Tito Ortega
 
Le cycle de l'année liturgique
Le cycle de l'année liturgiqueLe cycle de l'année liturgique
Le cycle de l'année liturgiquekt42 catechisme
 
Evangelio san mateo 13, 24 43
Evangelio san mateo 13, 24 43Evangelio san mateo 13, 24 43
Evangelio san mateo 13, 24 43monica eljuri
 
Passover for Christians
Passover for ChristiansPassover for Christians
Passover for ChristiansVictoria Poole
 
A Arca de Noé: flashcards para crianças pequenas
A Arca de Noé: flashcards para crianças pequenasA Arca de Noé: flashcards para crianças pequenas
A Arca de Noé: flashcards para crianças pequenasFreekidstories
 
El verdadero clamor de media noche - S Snow español
El verdadero clamor de media noche - S Snow españolEl verdadero clamor de media noche - S Snow español
El verdadero clamor de media noche - S Snow españolZafnat Panea
 
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27sifexol
 
Profecía | Elena G. White - Apocalipsis 14
Profecía | Elena G. White - Apocalipsis 14Profecía | Elena G. White - Apocalipsis 14
Profecía | Elena G. White - Apocalipsis 14Ministerio Palmoni
 
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27sifexol
 
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)Profecía | Patrón Profético - El Patrón Profético (2do Estudio)
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)Ministerio Palmoni
 
Versets bibliques pour les enfants - La nature de Dieu
Versets bibliques pour les enfants - La nature de DieuVersets bibliques pour les enfants - La nature de Dieu
Versets bibliques pour les enfants - La nature de DieuFreekidstories
 
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47sifexol
 
Carta de Aristeas a Filócrates
Carta de Aristeas a FilócratesCarta de Aristeas a Filócrates
Carta de Aristeas a FilócratesAgustín Ramos
 
Estudios yo soy wellington gordon
Estudios yo soy   wellington gordonEstudios yo soy   wellington gordon
Estudios yo soy wellington gordonWellinton Gordon
 

Tendances (20)

BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, PROVERBIOS, PARTE 35 DE 47
 
10 doutrina cristã acerca do diabo
10   doutrina cristã acerca do diabo10   doutrina cristã acerca do diabo
10 doutrina cristã acerca do diabo
 
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)
1 inexcusable ante_dios (Estudio bíblico en la Carta de Pablo a los Romanos)
 
Le cycle de l'année liturgique
Le cycle de l'année liturgiqueLe cycle de l'année liturgique
Le cycle de l'année liturgique
 
Ain El rapto secreto
Ain El rapto secretoAin El rapto secreto
Ain El rapto secreto
 
Evangelio san mateo 13, 24 43
Evangelio san mateo 13, 24 43Evangelio san mateo 13, 24 43
Evangelio san mateo 13, 24 43
 
Passover for Christians
Passover for ChristiansPassover for Christians
Passover for Christians
 
Salmo 121
Salmo 121Salmo 121
Salmo 121
 
A Arca de Noé: flashcards para crianças pequenas
A Arca de Noé: flashcards para crianças pequenasA Arca de Noé: flashcards para crianças pequenas
A Arca de Noé: flashcards para crianças pequenas
 
El verdadero clamor de media noche - S Snow español
El verdadero clamor de media noche - S Snow españolEl verdadero clamor de media noche - S Snow español
El verdadero clamor de media noche - S Snow español
 
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, CARTA A TITO, PARTE 18 DE 27
 
09 daniel y apocalipsis (ibad) lección 9
09 daniel y apocalipsis (ibad) lección 909 daniel y apocalipsis (ibad) lección 9
09 daniel y apocalipsis (ibad) lección 9
 
Profecía | Elena G. White - Apocalipsis 14
Profecía | Elena G. White - Apocalipsis 14Profecía | Elena G. White - Apocalipsis 14
Profecía | Elena G. White - Apocalipsis 14
 
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27
BIBLIA CATOLICA, NUEVO TESTAMENTO, INTRODUCCION, PARTE 1 DE 27
 
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)Profecía | Patrón Profético - El Patrón Profético (2do Estudio)
Profecía | Patrón Profético - El Patrón Profético (2do Estudio)
 
Versets bibliques pour les enfants - La nature de Dieu
Versets bibliques pour les enfants - La nature de DieuVersets bibliques pour les enfants - La nature de Dieu
Versets bibliques pour les enfants - La nature de Dieu
 
Espiritualidad La Salle
Espiritualidad La SalleEspiritualidad La Salle
Espiritualidad La Salle
 
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47
BIBLIA CATOLICA, ANTIGUO TESTAMENTO, DANIEL, PARTE 33 DE 47
 
Carta de Aristeas a Filócrates
Carta de Aristeas a FilócratesCarta de Aristeas a Filócrates
Carta de Aristeas a Filócrates
 
Estudios yo soy wellington gordon
Estudios yo soy   wellington gordonEstudios yo soy   wellington gordon
Estudios yo soy wellington gordon
 

En vedette

Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Kelver Merlotti
 
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosAndreano Lanusse
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Dados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapDados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapLanderson Gomes
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoFernando Macedo
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Bate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareBate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareAdriano Santos
 
Rad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacRad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacLanderson Gomes
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013Vic Fernandes
 
FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014Alan Glei
 
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Cássio Nandi Citadin
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015Guinther Pauli
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoFernando Macedo
 

En vedette (20)

Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015
 
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dadosResolvendo problemas de performance em aplicações Delphi e bancos de dados
Resolvendo problemas de performance em aplicações Delphi e bancos de dados
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Certificação Delphi
Certificação DelphiCertificação Delphi
Certificação Delphi
 
Dados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnapDados e Serviços Remotos via DataSnap
Dados e Serviços Remotos via DataSnap
 
Exploring FireDAC
Exploring FireDACExploring FireDAC
Exploring FireDAC
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certo
 
RESTful com json
RESTful com jsonRESTful com json
RESTful com json
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Bate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftwareBate papo sobre desenvolvimento de spftware
Bate papo sobre desenvolvimento de spftware
 
Rad Studio 10 com Android e Unidac
Rad Studio 10 com Android e UnidacRad Studio 10 com Android e Unidac
Rad Studio 10 com Android e Unidac
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
ListBox e Listview em Apps Mobile - Embarcadero Conference 2013
 
FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014FireDAC: do básico ao avançado - Embarcadero Conference 2014
FireDAC: do básico ao avançado - Embarcadero Conference 2014
 
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
Hora GTI - Top 10 Tendências Mobile para 2015 e 2016
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
 

Similaire à Datasnap Avançado: Autenticação, Autorização, Filtros e Cache

ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Apostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaApostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaDaniel Silveira
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesJackson F. de A. Mafra
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo SummitAmazon Web Services
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvemIgnacio Nin
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoHanderson Frota
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Aula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - ProcessosAula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - ProcessosMessias Batista
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 

Similaire à Datasnap Avançado: Autenticação, Autorização, Filtros e Cache (20)

Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Apostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaApostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiula
 
Aula 1
Aula 1Aula 1
Aula 1
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
 
Estratégias de migração para cloud
Estratégias de migração para cloudEstratégias de migração para cloud
Estratégias de migração para cloud
 
Aplicações web parte 2
Aplicações web parte 2Aplicações web parte 2
Aplicações web parte 2
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvem
 
Redes de computador
Redes de computadorRedes de computador
Redes de computador
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - Resumo
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Aula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - ProcessosAula04 Sistemas Distribuídos - Processos
Aula04 Sistemas Distribuídos - Processos
 
JBoss Clustering
JBoss ClusteringJBoss Clustering
JBoss Clustering
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 

Datasnap Avançado: Autenticação, Autorização, Filtros e Cache

  • 1. Datasnap Avançado Respostas para um Sistema Robusto Kelver Merlotti
  • 2. Kelver Merlotti • Embarcadero MVP • Coordenador editorial da Active Delphi • Consultor independente • Especialista em N-Tier e Mobile • Trabalha com Delphi há +15 anos • Contatos • Email: kmerlotti@gmail.com • Twitter: @kmerlotti • Facebook: http://fb.com/kmerlotti2
  • 3. Vamos falar sobre… • Segurança com Authentication; Authorization; e Transport Filters • Performance com Caching; Rest Filters; e • Responsidivade with Callbacks 3
  • 5. Diferença • Authentication acontece quando “alguém” tenta acessar o servidor, enquanto Authorization acontece quando “alguém” já logado em seu servidor tenta usar algo dele. Dito isso: • Não há como autorizar alguém ainda não autenticado • Se está autenticado, ainda poderá não estar autorizado a fazer algo 5
  • 6. Como autenticar • TDSAuthenticationManager.onAuthenticate, que nos dá informações como: • O Protocolo sendo utilizado: http, https ou tcp • O contexto sendo utilizado (http://server:port/context/something) • O Usuário e Senha sendo utilizados • Após testar as credenciais você pode decidir se a operação é válida ou não e adicionar alguns papéis (roles) ao usuário que está se autenticando. • Este papéis serão úteis logo mais, quando precisar decidir o que este usuário pode ou não fazer. 6
  • 7. Como autorizar • Existem 3 formas de aprovar/rejeitar uma tentativa de executar algo em seu servidor: • Usando o atributo TRoleAuth em classes e métodos • Menos flexível, mas requer praticamente nenhum código • Usando a coleção TDSAuthenticationManager.Roles • Útil com DataSetProvider’s e com muitas roles/profiles • Pode requerer mais código • Usando o evento TDSAuthenticationManager.onAuthorize • Mais flexível, 100% codificado • Importante: TDSAuthManager.Roles sobrescreverá qualquer atributo TRoleAuth!7
  • 9. Mais sobre Authentication e Authorization • Authentication and Authorization (DocWiki) • http://docwiki.embarcadero.com/RADStudio/Seattle/en/Authentication_and_Authorization • Secure DataSnap Development (CodeRage 8 Session Replay) • http://www.youtube.com/watch?v=X1CW9A1bCzk • Delphi Labs: DataSnap XE - Authentication and Authorization • http://edn.embarcadero.com/article/41267 • Authentication and Authorization with DataSnap and REST • https://mathewdelong.wordpress.com/2010/09/12/authentication-and-authorization-with-datasnap-and-rest/9
  • 11.
  • 12. Que filtro é esse? • É um código a ser executado sobre os bytes que serão enviados e recebidos pelas aplicações servidora e cliente. • Delphi traz 3 filtros prontos para uso: • 1 Filtro de Compactação, baseado em Zlib; e • 2 Filtros de Criptografia, baseado em RSA e PC1 • Todos estes filtros tem efeito sobre TCP/IP e devem ser declarados em ambos os lados, cliente e servidor. • Filtros podem ser customizados, estendendo a classe Data.DBXTransport.TTransportFilter 12
  • 13. Transport Filter na prática 13
  • 14. Mais sobre Transport Filters • Filtering DataSnap Byte Stream (DocWiki) • http://docwiki.embarcadero.com/RADStudio/Seattle/en/Filtering_DataSnap_Byte_Stream • Delphi Labs: DataSnap XE - Transport Filters • http://edn.embarcadero.com/article/41293 • Secure DataSnap Development (CodeRage 8 Session Replay) • http://www.youtube.com/watch?v=X1CW9A1bCzk • DataSnap Filter Compendium • http://www.danieleteti.it/datasnap-filters-compendium/14
  • 16. Nada é mais rápido para processar do que o que não precisa ser processado! 16
  • 17. DataSnap REST Parameter Cache • Em um servidor REST, quando um método retorna um ou mais tipos complexos como Streams, ele pode responder ao cliente que estes dados estão em cache, possibilitando este cliente requisitar os dados em cache. Tudo que você precisa é definir o cabeçalho “Accept” da requisição como “application/rest”. • Então o servidor responderá com algo como: • {"result":["0/0/0"],"cacheId":0,"cmdIndex":0} • Isto significa que agora você tem um Parâmetro com este cacheId armazenado em sua sessão. Basta fazer uma nova requisição com o mesmo “dssession” para obter o conteúdo. A URL é mais ou menos assim: • http://host:port/datasnap/cache/0/0/017
  • 18. “Cacheando” dados • Fazer cache de dados é (quase) sempre uma boa ideia! • Não é tão simples fazer, mas é muito valioso no ambiente de produção. • Pode ser feito do lado servidor ou do lado cliente, que é preferível. • Dados que não mudam com frequência são ótimos candidatos a estarem em cache, como: • Países, Estados, Cidades, Unidades de Medida, etc. • É essencial ter um mecanismo de invalidação de cache, que depende do contexto, mas normalmente é feito por: • Tempo de vida, definindo a data e hora a expirar • Mudança nos dados • Usando um hash dos dados; ou • Usando um controle de versão dos dados (InterBase Change Views é O CARA nisso!)18
  • 19. Cache do lado cliente • Sempre que possível, armazene dados do lado cliente! • Evitará tráfego desnecessário com o Servidor de Aplicação e consequentemente com Servidor de Banco de Dados • Requer mais cuidado com a invalidação • Considere utilizar: • ClientDataSet’s; • FDMemTable’s • FireDAC LocalSQL • Lembre-se: em muitos casos tentar sincronizar o cache pode ser perda de tempo. Jogue-o fora e crie novamente.19
  • 20. Cache do lado servidor • Usado para evitar acesso desnecessário ao banco de dados • Pode ser um cache único para todos os clientes ou um cache por cliente • Pode-se usar a propriedade TDSServerClass.LifeCycle para gerenciar isso • Server: Um único cache (que faz mais sentido, mas nem sempre possível) • Session: Cada cliente terá seu próprio cache 20
  • 22. Mais sobre Caching • DBX Parameter Caching • http://docwiki.embarcadero.com/RADStudio/Seattle/en/DBX_Parameter_Caching • DataSnap REST Messaging Protocol - Session Parameter Caching • http://docwiki.embarcadero.com/RADStudio/Seattle/en/DataSnap_REST_Messaging _Protocol#Session_Parameter_Caching 22
  • 24.
  • 25. REST Request Filters • Mais relacionado a REST do que Datasnap em si Se não está familiarizado com REST, pode começar aqui: http://www.restapitutorial.com/ • Em resumo, servidores REST geralmente oferecem uma forma de “selecionar” do resultado somente o pedaço que o cliente solicitou, ao invés de todo o conteúdo. Isto é chamado REST Request Filters. • São usados no final da URL, como: …/metodo/parametro?filter.function=params • Datasnap possui 2 filtros REST embutidos: SubString (ss) e Table (t).25
  • 26. Filtro SubString • Pode operar sobre Strings e seus caracteres ou sobre Streams e seus bytes • Possui 3 funções: • Count(c): único parâmetro, para definir os primeiros N caracteres desejados • …?ss.c=1 retornará o primeiro caractere ou byte • Offset(o): único parâmetro, para definir os primeiros N caracteres que deseja ignorar • …?ss.o=10 retornará todo o conteúdo após o 10º caractere ou byte • Range(r): dois parâmeteros, para definir o offset e o count • …?ss.r=10,20 retornará o conteúdo a partir do 11º ao 30º caractere ou byte (Ignora 10, retorna 20) 26
  • 27. Filtro Table • Opera sobre Datasets, com as mesmas 3 funções do SubString, mas filtrando registros ao invés de caracteres ou bytes • Count(c): único parâmetro, para definir os primeiros N registros desejados • …?t.c=1 retornará o primeiro registro • Offset(o): único parâmetro, para definir os primeiros N registros que deseja ignorar • …?t.o=10 retornará todos os registros após o 10º • Range(r): dois parâmetros, para definir o offset e o count • …?t.r=10,20 retornará os registros do 11º ao 30º (ignora 10, retorna 20) 27
  • 28. REST Request Filters na prática 28
  • 29. Mais sobre REST Request Filters • Request Filters • http://docwiki.embarcadero.com/RADStudio/Seattle/en/Request_Filters • DataSnap REST Messaging Protocol - Request Filters • http://docwiki.embarcadero.com/RADStudio/Seattle/en/DataSnap_REST_Messaging _Protocol#Request_Filters • REST Servers in Delphi XE using DataSnap • http://www.embarcadero.com/br/rad-in-action/datasnap-rest 29
  • 31. Callback: o que é? Quando você liga para alguém, ele/ela pode te ligar de volta, certo? E é isso que o servidor faz! Se um cliente “liga” pra um servidor, este servidor pode “ligar de voltar” para este cliente! 31
  • 32. Ok, mas para que? • Para dar ao servidor a possibilidade de “falar” com o cliente de forma proativa! • Quando um cliente solicita algo ao servidor, não sabe o que está acontecendo lá até que recebe a resposta. • Do outro lado, o servidor não sabe como dizer ao cliente o que está acontecendo. • Usar um callback permite ao servidor fazer isso! 32
  • 33. Legal! Como? • Usando um método de callback; ou • Usando um canal de callback! 33
  • 35. Mais sobre Callback • Using Callbacks • http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_Callbacks • REST Heavyweight Callbacks • http://docwiki.embarcadero.com/RADStudio/Seattle/en/REST_Heavyweight_Callbacks • Delphi Labs: DataSnap XE - Callbacks - Artigo e vídeos (parte 1, 2 e 3) • http://edn.embarcadero.com/article/41374 • https://youtu.be/5zO3_g9Z-wc • https://youtu.be/geEzwg8XX8k • https://youtu.be/Hwode7a8O5k • Heavyweight Callbacks (HTTP) with DataSnap - Artigo e vídeos (parte 1 e 2) • https://mathewdelong.wordpress.com/2011/05/30/heavyweight-callbacks/ • https://youtu.be/IrweqUlENHU • https://youtu.be/xVUAisxqW0U35
  • 36. Para terminar… • Explore os recursos do Datasnap! Eles estão lá para serem usados! E funcionam :) • Veja os exemplos, leia a documentação. Estude! • Wizards nunca darão os melhores resultados. Vá além! • Sempre planeje seu servidor levando em consideração seu ambiente de produção. Até a qualidade da rede deve ser considerada. • Leia sobre pool de conexões de banco de dados e use-o! • Leveza nunca é suficiente já que nosso objetivo é ser o mais rápido possível! Mas só trabalho pesado pode trazer resultados leves! ;)36