Escolar Documentos
Profissional Documentos
Cultura Documentos
Delphi
ATENÇÃO: Este material está sendo liberado de forma gratuita do jeito que esta. Perdoe as
eventuais lacunas – Este material está licenciado sob os termos da CopyLeft
Sobre a arrayOF
1 de 40
Criando Web Services de Alto Desempenho com
Delphi
Sumário
Esta é a sua cópia pessoal da apostila ...................................................................... 1
Sobre esta apostila ........................................................................................................ 1
Sobre a arrayOF ............................................................................................................. 1
Material de apoio .......................................................................................................... 4
Introdução ...................................................................................................................... 4
Protocolo de Transporte X Protocolo de Comunicação ......................................... 6
TCP/IP – Protocolo de Transporte ............................................................................. 6
HTTP – Protocolo de Comunicação ........................................................................ 7
Momento mão na massa: Criando o seu próprio protocolo .............................. 7
SOA – Arquitetura Orientada a Serviço ...................................................................... 8
Provedor ...................................................................................................................... 8
Consumidor ................................................................................................................. 8
Comunicação ............................................................................................................ 9
ROA - Arquitetura Orientada a Recursos ................................................................... 9
Entendendo o HTTP para entender o REST ................................................................. 9
Web Humana X Web Programável ....................................................................... 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 mão na massa........................................................................................ 18
Dominando o JSON ..................................................................................................... 19
Estrutura do JSON ................................................................................................. 19
Interagindo com o JSON pelo Delphi................................................................ 23
Momento mão na massa: Recuperando o aniversário e as fotos dos seus
amigos do Facebook ........................................................................................... 24
Serialização de objetos ............................................................................................... 26
ORM – Mapeamento Objeto – Relacional ........................................................... 27
DataSnap ...................................................................................................................... 28
No que o DataSnap se apoia? .............................................................................. 29
Mas... .......................................................................................................................... 29
2 de 40
Criando Web Services de Alto Desempenho com
Delphi
3 de 40
Criando Web Services de Alto Desempenho com
Delphi
Material de apoio
https://github.com/arrayOF/criando_web_services_alto_desempenho.git
Introdução
Esta mudança, que esta se acelerando cada vez mais, exige mudanças
drásticas na forma como encaramos o desenvolvimento de software.
Isto porque o usuário final quer a informação onde ele, o usuário, estiver.
A necessidade de se possuir um servidor dedicado esta fazendo tanto sentido
quanto a de um mainframe.
Algo que se deve ter em mente é que o Delphi não esta sozinho. Uma
grande solução necessariamente envolve outras tecnologias. Ainda nesta
apostila conheceremos um pouco de:
Apache;
Python;
noSQL e mongoDB;
4 de 40
Criando Web Services de Alto Desempenho com
Delphi
5 de 40
Criando Web Services de Alto Desempenho com
Delphi
6 de 40
Criando Web Services de Alto Desempenho com
Delphi
Já o HTTP, assim como outros (FTP, SMTP e por ai vai) que é o objeto
central dos nossos estudos é um protocolo de comunicação entre softwares. É
como se fosse uma “língua”.
Isso poderá ser via cabo serial ou via TCP/IP e para isso você terá que
estudar o protocolo de comunicação do fabricante do equipamento.
Em teoria esses protocolos são mais rápidos que os disponíveis, pois são
otimizados, não tendo informações supérfluas.
7 de 40
Criando Web Services de Alto Desempenho com
Delphi
CONSUMIDOR PROVEDOR
COMUNICAÇÃO
Provedor
Consumidor
8 de 40
Criando Web Services de Alto Desempenho com
Delphi
Comunicação
Porém nos últimos anos o REST vem ganhando força e seu aspecto mais
marcante é o de justamente “reaproveitar” os conceitos do HTTP.
9 de 40
Criando Web Services de Alto Desempenho com
Delphi
HTTP
Para chegar ao seu destino toda esta estrutura passa por uma rede.
Vamos encarar então a rede e todo o seu aparato como o carteiro.
PROTOCOLO
TRANSFERÊNCIA
HIPERTEXTO
10 de 40
Criando Web Services de Alto Desempenho com
Delphi
Obviamente isso já nos remete ao HTML que por sinal surgiu junto com o
HTTP. Não à toa HTML significa Linguagem de Marcação de Hipertexto.
REST
O REST não é uma tecnologia por si só, mas uma técnica, ou conjunto
de princípios, para o desenvolvimento de sistemas distribuídos. É, portanto,
uma arquitetura ou, em outras palavras, uma proposta de trabalho. Sendo
assim, temos que entender ao máximo a proposta do REST para conseguir
aplica-la na prática.
Estado Representacional
Um consenso no REST é que ele não guarda estado, dai vem o termo
recorrente stateless (sem estado). Então cabe a cada ponta (cliente e servidor
basicamente) receber, modificar e repassar o estado do recurso. Logo, a
mensagem HTTP deve possuir todas as informações necessárias sobre o recurso
que esta sendo trabalhado.
Aumentar a escalabilidade;
Diminuir a latência;
Encapsulamento de sistemas legados;
Definição clara das responsabilidades do cliente e do servidor;
Evolvabilidade, que é a capacidade de evoluir e se adaptar;
11 de 40
Criando Web Services de Alto Desempenho com
Delphi
Para trabalhar na web o sistema tem que ser desenhado para isso. E
não estamos falando de página web ou da aplicação móvel. Estamos falando
de back-end.
Apesar de não ser uma leitura obrigatória vale a pena citar que as
especificações do HTTP estão no RFC 2616 cujo link é:
http://www.ietf.org/rfc/rfc2616.txt
12 de 40
Criando Web Services de Alto Desempenho com
Delphi
Cabeçalho HTTP
Quebra de linha indicando o fim cabeçalho HTTP
Conteúdo (opcional)
Cabeçalho HTTP
Requisição
13 de 40
Criando Web Services de Alto Desempenho com
Delphi
Resposta
URL X URI
14 de 40
Criando Web Services de Alto Desempenho com
Delphi
[protocolo]://[servidor]:[porta]/[caminho]/[recurso]
http://pt.wikipedia.org/wiki/URN
http://pt.wikipedia.org/wiki/URL
http://pt.wikipedia.org/wiki/URI
15 de 40
Criando Web Services de Alto Desempenho com
Delphi
Recurso Ativado
Mas isso não deixa de ser um recurso, sendo referido então como um
Recurso Ativado, pois é gerado a partir do processamento de informações
dispersas.
Representação do Recurso
Os formatos mais usuais são o XML, JSON e YAML sendo o JSON o mais
popular nos sistemas REST.
CSV
“João da Silva”;45;
INI
NOME=João da Silva
IDADE=45
XML
<xml>
<nome>João da Silva</nome>
<idade>45</idade>
</xml>
JSON
{
“nome”: “João da Silva”,
“idade”: 45
}
YAML - http://pt.wikipedia.org/wiki/YAML
16 de 40
Criando Web Services de Alto Desempenho com
Delphi
HTML
<html>
<body>
<div class=”nome”>João da Silva</div>
<div class=”idade”>45</div>
</body>
</html>
Interface Uniforme
Método Ação
GET Recupera um determinado recurso ou lista de recursos
PUT Atualiza um determinado recurso ou cria se inexistente
POST Cria um novo recurso
DELETE Elimina um determinado recurso
http://gc.blog.br/2007/07/02/post-vs-put-quem-insere-e-quem-altera/
Status HTTP
17 de 40
Criando Web Services de Alto Desempenho com
Delphi
http://dolarhoje.com/
18 de 40
Criando Web Services de Alto Desempenho com
Delphi
Dominando o JSON
Estrutura do JSON
http://www.json.org/json-pt.html
JSON String
19 de 40
Criando Web Services de Alto Desempenho com
Delphi
“”
“mário.guedes”
“Fernanda\nJúlio”
JSON Number
-10
30.15
20 de 40
Criando Web Services de Alto Desempenho com
Delphi
JSON True
true
JSON False
false
JSON Null
null
21 de 40
Criando Web Services de Alto Desempenho com
Delphi
JSON Array
[]
JSON Object
Exemplos válidos:
{}
{“nome” : “mário.guedes”}
22 de 40
Criando Web Services de Alto Desempenho com
Delphi
Perceba que a chave, por si só, é representado por uma string incluindo,
portanto, as aspas duplas nas extremidades. Já o valor pode ser de qualquer
tipo, até mesmo outro JSON Object.
O Delphi possui classes nativas para interagir com o JSON. Assim como
no XML é necessário criar rotinas recursivas. No dia a dia não parecerá uma
boa ideia por envolver muito código, por isso, seguindo uma filosofia de
trabalho que privilegia a simplicidade, o ideal será criar um esquema de
serialização e deserialização de objetos.
23 de 40
Criando Web Services de Alto Desempenho com
Delphi
Legibilidade;
Diminuição de tráfego de rede;
o Aumento de vazão e consequentemente da escalabilidade
Aderência às linguagens modernas – JavaScript, Python e Ruby por
exemplo;
https://developers.facebook.com/
24 de 40
Criando Web Services de Alto Desempenho com
Delphi
Este recurso não permite uma integração total com Facebook mas já é
o suficiente. Basicamente permite interagir com as informações relacionadas à
nossa conta pessoal.
25 de 40
Criando Web Services de Alto Desempenho com
Delphi
Serialização de objetos
26 de 40
Criando Web Services de Alto Desempenho com
Delphi
27 de 40
Criando Web Services de Alto Desempenho com
Delphi
DataSnap
SERVIDOR DATASNAP
TCP/IP
Cliente #2
Thread Thread Thread
#1 #2 #3
Cliente #3
28 de 40
Criando Web Services de Alto Desempenho com
Delphi
Mas...
http://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-
based-on-speed-stability-tests/
http://robertocschneiders.wordpress.com/2013/01/09/datasnap-analysis-
based-on-speed-stability-tests-part-2/
http://www.devmedia.com.br/colocando-um-servidor-datasnap-a-prova-
revista-clubedelphi-magazine-151/28228
29 de 40
Criando Web Services de Alto Desempenho com
Delphi
Biblioteca Link
mORMt http://synopse.info/fossil/wiki/Synopse+OpenSource
Delphi On Rails https://code.google.com/p/delphionrails/
TMS RemoteDB http://www.tmssoftware.com/site/remotedb.asp
Brook framework http://silvioprog.github.io/brookframework/
TCP/IP HTTP
Aderente apenas a clientes Delphi Aderente a qualquer cliente HTTP
Possibilidade de trabalhar RAD Potencialmente exige mais código
Conexão persistente: Conexão não persistente:
Maior velocidade Menor velocidade (?)
Menor escalabilidade Maior escalabilidade
Outros webservices;
30 de 40
Criando Web Services de Alto Desempenho com
Delphi
31 de 40
Criando Web Services de Alto Desempenho com
Delphi
32 de 40
Criando Web Services de Alto Desempenho com
Delphi
Classe
TDSHTTPService TDSServer TDSServerClass Classe de Negócio
Manipuladora
http://docwiki.embarcadero.com/RADStudio/XE6/en/DataSnap_REST_Messagi
ng_Protocol
33 de 40
Criando Web Services de Alto Desempenho com
Delphi
A classe que será utilizada para atender a requisição HTTP não deve ser
a mesma que efetuará os procedimentos solicitados. O ideal é que sejam duas
classes distintas.
{$METHODINFO ON}
TUsuario = class
private
// ...
public
end;
{$METHODINFO OFF}
Listagem 1 - Exemplo de uma classe manipuladora
34 de 40
Criando Web Services de Alto Desempenho com
Delphi
Conteúdo JSON
oRetorno.ResponseCode := 200;
oRetorno.ResponseMessage := 'OK';
oRetorno.ResponseContentType := 'application/json';
oRetorno.ResponseContent := Self.Serializar(AObjeto);
end;
Listagem 2 - Exemplo de utilização do TDSInvocationMetadata
35 de 40
Criando Web Services de Alto Desempenho com
Delphi
Porém este recurso pode ser muito útil para influenciar na resposta, e um
exemplo imediato seria a paginação do resultado.
Exemplo:
http://localhost/ds/rest/TClasse/Metodo/Param1?inicio=10&limite=10
var
oHTTP: TDSInvocationMetadata;
begin
oHTTP := GetInvocationMetadata;
//...
//...
end;
36 de 40
Criando Web Services de Alto Desempenho com
Delphi
37 de 40
Criando Web Services de Alto Desempenho com
Delphi
38 de 40
Criando Web Services de Alto Desempenho com
Delphi
39 de 40
Criando Web Services de Alto Desempenho com
Delphi
http://www.infoq.com/br/presentations/rest-arquitetura-abril
http://www.slideshare.net/lfcipriani/como-um-verdadeiro-sistema-rest-
funciona-arquitetura-e-performance-na-abril
http://blip.tv/agaelebe/26_11_2011_gurusp_http_cipriani-720-5879314
https://speakerdeck.com/lfcipriani/abusando-nas-requisicoes-http-sem-
medo
http://www.infoq.com/br/news/2013/05/idempotent?utm_source=twitterfeed
&utm_medium=twitter&utm_content=infoqbr
Livros recomendados
40 de 40