SlideShare ist ein Scribd-Unternehmen logo
1 von 89
Construindo um
sistema distribuido
usando REST
Palestra ministrada na Universidade São Judas Tadeu
David Robert
davidrobert@gmail.com
twitter: while42
github: davidrobert
AMBIENTE
gráfica
distribuidora
educação
Playboy Veja
Quatro Rodas
Super Interessante
Placar
“organizações que projetam sistemas
são restritas a produzir projetos que
são cópias das estruturas de
comunicação dessas organizações”
Lei de
Conway
http://www.melconway.com/Home/Conways_Law.html
CMS’s existem desde os anos 90.
Por que reiventamos a roda?
Porque
temos alta
diversidade
de
requisitos
negócios
pessoas
orçamentos
prioridades
culturas
{
Como construir uma
boa arquitetura?
Integração
o velho problema
Banco de Dados
Solução Prática #1
Solução Prática #2
Transferência de Arquivos
Solução Prática #3
Web Services
Como são os Web Services hoje?
Como são os Web Services hoje?
● WSDL
● SOAP
● XML
● RPC (Remote Procedure Call)
etc
1) Precisamos disso
tudo mesmo?
2) Alguém já não
resolveu isso?
3) Como avaliar se é
uma boa
arquitetura?
boa
arquitetura
necessidades
atendidas
custo
aceitável
= + * ß
ß
quão bem o seu cliente
sabe pedir o que quer
MTRH
MTRH
mean time to
recovery
happiness
ALEXANDRIA
diretoria
digital
Playbo
y
Vej
a
Quatro
Rodas
RAIO X
16 sites em produção
+/- 60 desenvolvedores
13 arquitetos de software
6 Gerentes de Projeto
4 Gerentes de Produto
1 Advocate da Plataforma
● MongoDB
● MySQL
● Hbase
● HDFS
● PostgreSQL
● memcached
● redis
● Ruby
● Java
● Javascript
● rails
● sinatra
● goliath
● node.js
● play
● jetty
● tokamak
● cachebag
● restfulie
Linguagens Storages Frameworks outros
● Solr
● Hadoop
● RabbitMQ
● Varnish
● New Relic
● Tracelytics
https://github.com/abril
Infraestrutura Alexandria + sites
● 91 VMs para ambientes dev, qa, stage
● AMC (Abril Mídia Cloud): private cloud (Xen/Open Stack)
● ou VMWare
● ~100 VMs + 20 físicas para produção
● Data center próprio, AWS, Heroku
● Total aproximado: 220 máquinas
+15 milhões de pageviews
(de jan até fev de 2013)
HTTP
domínio
● acesso e manipulação de recursos
● implementa regras de negócio
● servidor HTTP + base de dados
● infra “isolada”
● ~ 8 domínios
● ex: editorial (matérias, galerias, etc), anotações
(comentários), estabelecimentos, mídia, pessoas
serviço
● consumo e manipulação de recursos
● servidor HTTP + (opcional base de dados)
● infra “isolada”
● ~ 12 serviços
● ex: console, socialcore, search, Abril ID, abr.io, etc
data-entry
● entrada da Redação
● aplicação web
● ~ 1 para cada domínio
● “API explorer”
sitetools● admin do site
● manipulação das áreas e templates
● agiliza criação de produtos
● a fronteira com o usuário
● opcional
HTTP
domínio
serviço
data-entry sitetools
system of systems
Como integrar?
REST
Por que escolher REST?
Por que escolhemos REST?
● Protocolo de transferência amplamente
utilizado
● Escalabilidade
● Performance alta
● Alta disponibilidade
● Permitir evolução sem parar o sistema
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Escalabilidade
● Performance alta
● Alta disponibilidade
● Permitir evolução sem parar o sistema
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Performance alta
● Alta disponibilidade
● Permitir evolução sem parar o sistema
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Web Proxy (localização geografica)
● Alta disponibilidade
● Permitir evolução sem parar o sistema
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Web Proxy (localização geografica)
● Load Balancers "comoditizados"
● Permitir evolução sem parar o sistema
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Web Proxy (localização geografica)
● Load Balancers "comoditizados"
● Load Balancers
● Permitir evolução sem quebrar os clientes
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Web Proxy (localização geografica)
● Load Balancers "comoditizados"
● Load Balancers
● HTML, JSON, XML
● Segurança
Por que escolhemos REST?
● HTTP
● Web Cache
● Web Proxy (localização geografica)
● Load Balancers "comoditizados"
● Load Balancers
● HTML, JSON, XML
● HTTPS / TLS
Uniform interface no
Alexandria
resouce identification
http://editorial.api.abril.com.br/materia/dicas
http://editorial.api.abril.com.br/materia/ac23657fg
http://bebe.abril.com.br/materia/ac23657fg
resources
resources
{
"tipo_recurso" : "materia",
"link" : [
{
"href" : "http://editorial.api.abril.com.br/materia/4f0dea5a1e13694",
"rel" : "self",
"type" : "application/json"
},
{
"href" : "http://editorial.api.abril.com.br/materias",
"rel" : "materias",
"type" : "application/json"
}
],
"id" : "http://editorial.api.abril.com.br/materia/4f0dea5a1e13694",
"slug" : "o-quintal-da-realeza",
"marca" : "viajeaqui",
"status" : "disponivel",
"descricao_conteudo" : "O quintal da realeza",
"fonte" : "viajeaqui",
(continua)
representations
JSON
e um tiquinho assim de XML
ou melhor,
de application/opensearchdescription+xml
representations
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:grafo="http:
//socialcore.api.abril.com.br/grafo/busca">
<ShortName>Buscar relacionamentos</ShortName>
<Description>Busca de relacionamentos no grafo</Description>
<Url type="application/json"
template="http://socialcore.api.abril.com.br/grafo/busca?usuario={grafo:usuario?}
&amp;tipo={grafo:tipo}"/>
<Query role="example"
title="Exemplo de valores dos parâmetros"
grafo:usuario="id do usuario"
grafo:tipo="segue |seguido_por " />
</OpenSearchDescription>
representations
hypermedia
Exemplo: criar uma atividade
de um usuário no site.
Sabendo somente o entrypoint:
http://socialcore.api.abril.com.br
POST http://socialcore.api.abril.com.br/
Accept: application/json
hypermedia
POST???
hypermedia
HTTP/1.1 405 Method Not Allowed
Allow: GET
hypermedia
GET http://socialcore.api.abril.com.br/
Accept: application/json
hypermedia
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"titulo": "socialcore",
"link": [
{
"href": "http://socialcore.api.abril.com.br/",
"rel": "self",
"type": "application/json"
},
{
"href": "http://socialcore.api.abril.com.br/atividade",
"rel": "atividade",
"type": "application/json"
},
{
"href": "http://socialcore.api.abril.com.br/grafo",
"rel": "grafo",
"type": "application/json"
}
]
}
hypermedia
GET http://socialcore.api.abril.com.br/atividade
Accept: application/json
hypermedia
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"titulo": "Entry Point de Atividades",
"link": [
{
"href": "http://socialcore.api.abril.com.br/atividade/template",
"rel": "template",
"type": "application/json"
},
{
"href": "http://socialcore.api.abril.com.br/atividade/busca/descritor",
"rel": "search",
"type": "application/opensearchdescription+xml"
},
{
"href": "http://socialcore.api.abril.com.br/atividade/stat/descritor",
"rel": "stat",
"type": "application/opensearchdescription+xml"
}
]
}
hypermedia
GET http://socialcore.api.abril.com.br/atividade/template
Accept: application/json
hypermedia
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"atividade": {
"app": "",
"created_at": "",
"usuario": "",
"tipo": "",
"objeto": {
"tipo": ""
},
"resultado": {
"tipo": ""
}
},
(continua)
hypermedia
"link": [
{
"href": "http://socialcore.api.abril.com.br/atividade",
"rel": "atividade",
"type": "application/json"
},
{
"href": "http://socialcore.api.abril.com.br/atividade/busca/descritor",
"rel": "search",
"type": "application/opensearchdescription+xml"
},
{
"href": "http://socialcore.api.abril.com.br/atividade/stat/descritor",
"rel": "stat",
"type": "application/opensearchdescription+xml"
}
]
}
hypermedia
POST http://socialcore.api.abril.com.br/atividade
Accept: application/json
Content-Type: application/json; charset=utf-8
Authentication: Basic 37rnx9w87rjdw87gri
{
"atividade": {
"app": "http://aapg.api.abril.com.br/produtos/1",
"created_at": 1325086429,
"tipo": "comentar",
"objeto": {
"descricao": "Titulo da materia",
"id": "http://veja.abril.com.br/noticia/economia/confianca-da",
"tipo": "materia"
},
"resultado": {
"corpo": "otima materia",
"id": "http://veja.abril.com.br/noticia/economia/confianca-da/comments/1",
"tipo": "comentario"
}
}
}
hypermedia
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
{
"tipo_recurso":"erro",
"atividade":{
"usuario":"",
},
"erros":[
{"atributo":"usuario","mensagem":["é obrigatório"]}
]
}
hypermedia
POST http://socialcore.api.abril.com.br/atividade
Accept: application/json
Content-Type: application/json; charset=utf-8
Authentication: Basic 37rnx9w87rjdw87gri
{
"atividade": {
"app": "http://aapg.api.abril.com.br/produtos/1",
"created_at": 1325086429,
"usuario": "http://aapg.api.abril.com.br/usuarios/2",
"tipo": "comentar",
"objeto": {
"descricao": "Titulo da materia",
"id": "http://veja.abril.com.br/noticia/economia/confianca-da",
"tipo": "materia"
},
"resultado": {
"corpo": "otima materia",
"id": "http://veja.abril.com.br/noticia/economia/confianca-da/comments/1",
"tipo": "comentario"
}
}
}
hypermedia
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Location: http://socialcore.api.abril.com.
br/atividade/0922307
o/
hypermedia
application
protocol
HTTPstatus codes
representation metadata
resource metadata
control data
Lições aprendidas
pontos importantes em performance
client
origin server
● performance dos connectors
● non-blocking HTTP clients
● cache local
● middleware architecture
● libs padronizadas
● short stacks
● evented servers
● libs padronizadas
● good TTL strategy
● middleware architecture
● caches
● HTTP plumbing
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
●
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
● REST é uma arquitetura de longo prazo
●
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
● REST é uma arquitetura de longo prazo
● Defenda com todas as suas forças:
● seus metadados (recursos)
● sua interface
●
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
● REST é uma arquitetura de longo prazo
● Defenda com todas as suas forças:
● seus metadados (recursos)
● sua interface
● Documentação é essencial
●
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
● REST é uma arquitetura de longo prazo
● Defenda com todas as suas forças:
● seus metadados (recursos)
● sua interface
● Documentação é essencial
● Independência de desenvolvimento dos nós tem suas
desvantagens
●
● Lei de Postel
"Seja conservador no que faz, seja liberal no que você
aceita dos outros"
● REST é uma arquitetura de longo prazo
● Defenda com todas as suas forças:
● seus metadados (recursos)
● sua interface
● Documentação é essencial
● Independência de desenvolvimento dos nós tem suas
desvantagens
● Medir/monitorar o desempenho é importantíssimo
Assumimos que nossa
arquitetura está válida
necessidades
atendidas
custo
aceitável
+ * ß
MTRH
mas...
e quando REST
não for suficiente?
não use REST
Os responsáveis
PERGUNTAS ?
engineering.abril.com.br
digital.abril.com.br
Obrigado!
David Robert

Weitere ähnliche Inhalte

Andere mochten auch

Android webservice
Android webserviceAndroid webservice
Android webserviceAlan Echer
 
Android 03 - WebService
Android 03 - WebServiceAndroid 03 - WebService
Android 03 - WebServiceAline Borges
 
Android 04 - Persistência Local & SplashScreen
Android 04 - Persistência Local & SplashScreenAndroid 04 - Persistência Local & SplashScreen
Android 04 - Persistência Local & SplashScreenAline Borges
 
Sistemas De Arquivos Distribuídos (SAD)
Sistemas De Arquivos Distribuídos (SAD)Sistemas De Arquivos Distribuídos (SAD)
Sistemas De Arquivos Distribuídos (SAD)Frederico Madeira
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONMarcio Palheta
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 

Andere mochten auch (7)

Android webservice
Android webserviceAndroid webservice
Android webservice
 
Android Destin
Android DestinAndroid Destin
Android Destin
 
Android 03 - WebService
Android 03 - WebServiceAndroid 03 - WebService
Android 03 - WebService
 
Android 04 - Persistência Local & SplashScreen
Android 04 - Persistência Local & SplashScreenAndroid 04 - Persistência Local & SplashScreen
Android 04 - Persistência Local & SplashScreen
 
Sistemas De Arquivos Distribuídos (SAD)
Sistemas De Arquivos Distribuídos (SAD)Sistemas De Arquivos Distribuídos (SAD)
Sistemas De Arquivos Distribuídos (SAD)
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSON
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 

Ähnlich wie Construindo um sistema distribuido usando rest

Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Luis Cipriani
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAnitaibezerra
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyDextra
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Leandro Guimarães
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3André Luiz Forchesatto
 
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
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesEdgar Silva
 
Desenvolvimento web com software livre
Desenvolvimento web com software livreDesenvolvimento web com software livre
Desenvolvimento web com software livreRuan Carvalho
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software LivreRuan Carvalho
 

Ähnlich wie Construindo um sistema distribuido usando rest (20)

Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
Alexandria: um Sistema de Sistemas para Publicação de Conteúdo Digital utiliz...
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com Holy
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Palestra Sobre REST
Palestra Sobre RESTPalestra Sobre REST
Palestra Sobre REST
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
 
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
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e Suportes
 
Desenvolvimento web com software livre
Desenvolvimento web com software livreDesenvolvimento web com software livre
Desenvolvimento web com software livre
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software Livre
 

Mehr von David Robert Camargo de Campos

Evolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoEvolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoDavid Robert Camargo de Campos
 
Evolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoEvolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoDavid Robert Camargo de Campos
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinDavid Robert Camargo de Campos
 
Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7David Robert Camargo de Campos
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014David Robert Camargo de Campos
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesDavid Robert Camargo de Campos
 

Mehr von David Robert Camargo de Campos (15)

Evolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoEvolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto Desempenho
 
Evolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoEvolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenho
 
Introdução ao kotlin
Introdução ao kotlinIntrodução ao kotlin
Introdução ao kotlin
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7
 
Cultura na engenharia & Impacto no recrutamento
Cultura na engenharia & Impacto no recrutamentoCultura na engenharia & Impacto no recrutamento
Cultura na engenharia & Impacto no recrutamento
 
Os desafios de um chat integrado ao checkout
Os desafios de um chat integrado ao checkoutOs desafios de um chat integrado ao checkout
Os desafios de um chat integrado ao checkout
 
Times de Alta Performance
Times de Alta PerformanceTimes de Alta Performance
Times de Alta Performance
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
An introduction to programming in Go
An introduction to programming in GoAn introduction to programming in Go
An introduction to programming in Go
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
 
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
 
Dojo abril
Dojo abrilDojo abril
Dojo abril
 
Dicas para deixar seu código mais Robusto
Dicas para deixar seu código mais RobustoDicas para deixar seu código mais Robusto
Dicas para deixar seu código mais Robusto
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 

Construindo um sistema distribuido usando rest