Beruflich Dokumente
Kultur Dokumente
Delphi
Sobre a arrayOF
A arrayOF Consultoria e Treinamento tem por filosofia desenvolver o
potencial de seus parceiros ensinando e aprendendo com eles.
1 de 40
Sumrio
Esta a sua cpia pessoal da apostila ...................................................................... 1
Sobre esta apostila ........................................................................................................ 1
Sobre a arrayOF ............................................................................................................. 1
Material de apoio .......................................................................................................... 4
Introduo ...................................................................................................................... 4
Protocolo de Transporte X Protocolo de Comunicao ......................................... 6
TCP/IP Protocolo de Transporte ............................................................................. 6
HTTP Protocolo de Comunicao ........................................................................ 7
Momento mo na massa: Criando o seu prprio protocolo .............................. 7
SOA Arquitetura Orientada a Servio ...................................................................... 8
Provedor ...................................................................................................................... 8
Consumidor ................................................................................................................. 8
Comunicao ............................................................................................................ 9
ROA - Arquitetura Orientada a Recursos ................................................................... 9
Entendendo o HTTP para entender o REST ................................................................. 9
Web Humana X Web Programvel ....................................................................... 10
HTTP ............................................................................................................................. 10
REST ............................................................................................................................. 11
Estado Representacional .................................................................................... 11
Roy Fielding e Tim Berners-Lee ............................................................................ 12
Dissecando o protocolo HTTP sob o ponto de vista do REST ............................. 12
Regras gerais do protocolo HTTP ........................................................................ 13
Momento mo na massa........................................................................................ 18
Dominando o JSON ..................................................................................................... 19
Estrutura do JSON ................................................................................................. 19
Interagindo com o JSON pelo Delphi................................................................ 23
Momento mo na massa: Recuperando o aniversrio e as fotos dos seus
amigos do Facebook ........................................................................................... 24
Serializao de objetos ............................................................................................... 26
ORM Mapeamento Objeto Relacional ........................................................... 27
DataSnap ...................................................................................................................... 28
No que o DataSnap se apoia? .............................................................................. 29
Mas... .......................................................................................................................... 29
2 de 40
3 de 40
Material de apoio
Todos os cdigos dos exemplos citados nesta apostila esto disponveis
no GitHub:
https://github.com/arrayOF/criando_web_services_alto_desempenho.git
Introduo
Existe uma grande mudana em curso: estamos saindo da era das
solues on premisse para as solues in cloud.
Esta mudana, que esta se acelerando cada vez mais, exige mudanas
drsticas na forma como encaramos o desenvolvimento de software.
Isto porque o usurio final quer a informao onde ele, o usurio, estiver.
A necessidade de se possuir um servidor dedicado esta fazendo tanto sentido
quanto a de um mainframe.
Ns, desenvolvedores, precisamos nos reposicionar.
Esta apostila trata deste assunto. Como ns, desenvolvedores Delphi,
podemos nos adaptar a esta nova realidade? Como tirar o melhor da
ferramenta e atender s demandas atuais?
Algo que se deve ter em mente que o Delphi no esta sozinho. Uma
grande soluo necessariamente envolve outras tecnologias. Ainda nesta
apostila conheceremos um pouco de:
Apache;
Python;
noSQL e mongoDB;
4 de 40
5 de 40
http://www.dicas-l.com.br/arquivo/piada_tcp.php#.U-wWNfldWYA
6 de 40
7 de 40
acompanhar
evoluo
CONSUMIDOR
COMUNICAO
PROVEDOR
Provedor
Estrutura que prov funcionalidades de domnio de negcios. No nosso
escopo um conjunto de softwares com acesso a um banco de dados. Neste
software estaro as regras de negcio.
Consumidor
Estrutura de software que promove a visualizao das informaes bem
como a interao com o usurio final. Apesar desta descrio possvel
tambm que um consumidor seja outro software provedor.
8 de 40
Comunicao
Para duas partes distintas se comunicarem necessrio haver um meio
e um protocolo suportado por ambos. Aqui estamos falando de uma
comunicao TCP/IP utilizando o protocolo HTTP para o DataSnap\REST.
HTTP
O HTTP a sigla para Protocolo de Transferncia de Hipertexto.
Provavelmente disto voc j saiba. Mas vamos estudar cada uma destas
palavras e entender do que se trata.
A princpio pense no HTTP como um envelope. No envelope vo as
informaes necessrias para que o carteiro consiga entregar ao destinatrio,
certo? E dentro do envelope h um contedo.
Para chegar ao seu destino toda esta estrutura passa por uma rede.
Vamos encarar ento a rede e todo o seu aparato como o carteiro.
PROTOCOLO
Na informtica protocolo uma conveno, ou seja, um conjunto de
regras bem estabelecidas, que torna possvel a comunicao entre duas
partes. Existem diversos protocolos alm do HTTP como o FTP (transferncia de
arquivos), SMTP (envio de e-mail) e por ai vai. Cada um com um propsito
bem especfico e no existe um protocolo melhor que outro de um modo
geral. Em um grande sistema eles se complementam.
TRANSFERNCIA
Esta parte do significado do HTTP explicita o objetivo primrio deste
protocolo: a transferncia. Transferir fazer a movimentao da informao
de uma ponta outra, seja no mesmo dispositivo, passando por uma rede
local at chegar grande web.
HIPERTEXTO
Hipertexto basicamente um texto com referncias (os famosos links)
que nos levam a outros textos. O hiper vem do grego e significa sobre ou
alm. Grosso modo um texto que possui ligaes com outros textos e estes
com outros, o que nos possibilita saltar do ponto em que estamos
diretamente para um mais interessante.
10 de 40
REST
REST o acrnimo para Transferncia de Estado Representacional.
fortemente baseado no HTTP tirando proveito de seus aspectos para simplificar
o desenvolvimento de um servio web.
O REST no uma tecnologia por si s, mas uma tcnica, ou conjunto
de princpios, para o desenvolvimento de sistemas distribudos. , portanto,
uma arquitetura ou, em outras palavras, uma proposta de trabalho. Sendo
assim, temos que entender ao mximo a proposta do REST para conseguir
aplica-la na prtica.
O termo transferncia foi visto um pouco mais acima. Vamos falar
ento do estado representacional.
Estado Representacional
Aumentar a escalabilidade;
Diminuir a latncia;
Encapsulamento de sistemas legados;
Definio clara das responsabilidades do cliente e do servidor;
Evolvabilidade, que a capacidade de evoluir e se adaptar;
11 de 40
12 de 40
Cabealho HTTP
Quebra de linha indicando o fim cabealho HTTP
Contedo (opcional)
{nome: ol mundo}
Cabealho HTTP
13 de 40
<html>Ol mundo!</html>
14 de 40
URI
URL
URN
http://pt.wikipedia.org/wiki/URN
http://pt.wikipedia.org/wiki/URL
http://pt.wikipedia.org/wiki/URI
Classe de Recursos
Recursos
Clientes
Empresa XYZ
Empresa ABC
15 de 40
INI
NOME=Joo da Silva
IDADE=45
XML
<xml>
<nome>Joo da Silva</nome>
<idade>45</idade>
</xml>
JSON
{
nome: Joo da Silva,
idade: 45
}
YAML - http://pt.wikipedia.org/wiki/YAML
- nome: Joo da Silva
Idade: 57
16 de 40
HTML
<html>
<body>
<div class=nome>Joo da Silva</div>
<div class=idade>45</div>
</body>
</html>
Interface Uniforme
Ao
Recupera um determinado recurso ou lista de recursos
Atualiza um determinado recurso ou cria se inexistente
Cria um novo recurso
Elimina um determinado recurso
SQL
INSERT
SELECT
UPDATE
DELETE
HTTP
POST
GET
PUT
DELETE
Ao
Criar
Recuperar
Modificar ou Criar
Eliminar
17 de 40
Momento mo na massa
Uma necessidade recorrente de recuperarmos o valor do dlar para
registrarmos em nosso sistema. Afinal muitos clculos so feitos em cima deste
valor.
Obviamente que a soluo mais imediata que podemos desenvolver
uma tela de cadastro simples. Porm isto esta sujeito s falhas humanas:
esquecimento, erro de digitao e por ai vai.
Porque no, ento, recuperar este valor da Internet?
Um site que possui esta informao o Dolar Hoje:
http://dolarhoje.com/
18 de 40
Dominando o JSON
O formato adotado pelos atuais webservices para representao de
informao o JSON.
JSON o acrnimo de JavaScript Object Notation. No toa tem este
nome, pois surgiu no mbito do JavaScript, linguagem majoritariamente
utilizada para criar front-ends web.
uma formatao leve para intercmbio de dados e uma tima
alternativa ao XML. Um novo formato que esta criando popularidade o
YAML, mas ficar de fora do escopo deste treinamento por ainda no ter
aplicabilidade imediata.
Mais a frente nesta apostila falaremos do mongoDB e a cultura noSQL,
ou como preferimos nos referir, no relacional. O mongoDB guarda as
informaes no formato JSON.
Mas afinal, o que caracteriza uma informao JSON?
Estrutura do JSON
As imagens a seguir foram retiradas do site oficial do JSON:
http://www.json.org/json-pt.html
JSON simples. Tendo isso em mente fica mais fcil absorver os
conceitos. Temos tendncia a complicar as coisas e quando nos deparamos
com algo simples estranhamos. Alguns detalhes ficam mais obscuros ainda
para ns, desenvolvedores Delphi, devido s particularidades das linguagens,
no caso Delphi e JavaScript.
JSON String
19 de 40
mrio.guedes
Fernanda\nJlio
JSON Number
20 de 40
JSON True
21 de 40
JSON Object
22 de 40
23 de 40
Legibilidade;
Diminuio de trfego de rede;
o Aumento de vazo e consequentemente da escalabilidade
Aderncia s linguagens modernas JavaScript, Python e Ruby por
exemplo;
24 de 40
25 de 40
Serializao de objetos
26 de 40
27 de 40
DataSnap
O DataSnap a tecnologia padro do Delphi para a criao de
solues multicamada. H todo um histrico sobre esta tecnologia que no
vamos discutir nesta apostila.
Vamos simplesmente esquecer o passado, ao menos no que tange
proposta do treinamento e focar no momento atual.
A proposta do DataSnap, de uma maneira geral, o de publicar classes
e mtodos para uso remoto. A Figura 6 tenta ilustrar este conceito.
SERVIDOR DATASNAP
Servidor TCP
(Indy)
Cliente
TCP/IP
Cliente #2
Thread
#1
Thread
#2
Thread
#3
Cliente #3
28 de 40
Mas...
Infelizmente o DataSnap bastante criticado por aqueles que o
compara com outras solues e h um post muito popular do Roberto
Schneiders que faz uma criteriosa anlise de desempenho e em vrios
aspectos.
Os grandes viles so a biblioteca Indy (comunicao TCP/IP) e o
dbExpress (acesso a banco de dados).
Isso ressalta o mantra da Ortogonalidade. Nunca devemos depender
100% de uma tecnologia. bvio que um nvel de dependncia inevitvel.
http://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysisbased-on-speed-stability-tests/
http://robertocschneiders.wordpress.com/2013/01/09/datasnap-analysisbased-on-speed-stability-tests-part-2/
A Clube Delphi possui o post traduzido pelo prprio autor:
http://www.devmedia.com.br/colocando-um-servidor-datasnap-a-provarevista-clubedelphi-magazine-151/28228
Apesar disto o DataSnap uma tecnologia vivel e a arquitetura de
toda a soluo que ditar o sucesso ou no da empreitada.
29 de 40
Link
http://synopse.info/fossil/wiki/Synopse+OpenSource
https://code.google.com/p/delphionrails/
http://www.tmssoftware.com/site/remotedb.asp
http://silvioprog.github.io/brookframework/
HTTP
Aderente a qualquer cliente HTTP
Potencialmente exige mais cdigo
Conexo no persistente:
Menor velocidade (?)
Maior escalabilidade
Outros webservices;
30 de 40
31 de 40
32 de 40
TDSHTTPService
TDSServer
TDSServerClass
Classe
Manipuladora
Classe de Negcio
PROTOCOLO
http://
TDSHTTPService
Contexto
DataSnap
localhost:8080
/arrayof
SERVIDOR
Classe Manipuladora
Contexto
REST
/usuario
Classe
/TUsuario
Mtodo
/Usuario
Parmetro
/Joo da Silva
33 de 40
Consulta
GET
-
Alterao
POST
Update
Incluso
PUT
Accept
Excluso
DELETE
Cancel
Recuperar
Inserir
Excluir
Alterar
Verbo HTTP
GET
PUT
DELETE
POST
Mtodo
Usuario()
AcceptUsuario()
CancelUsuario()
UpdateUsuario()
34 de 40
35 de 40
Listagem
36 de 40
37 de 40
38 de 40
39 de 40
Livros recomendados
40 de 40