apontador.com: a experiência da migração para uma plataforma rest

Post on 08-Jul-2015

1.095 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Conheça a experiência do time do Apontador no desenvolvimento de uma nova API REST usando Java e Spring. Veja desafios encontrados, problemas/soluções e o resultado da experiência de um ano de desenvolvimento de uma nova plataforma de busca de locais. Principais tópicos: - Contexto e melhores práticas do REST - Autenticação e permissionamento com OAUTH2 - Negociação de conteúdo (XML, JSON) - Console de desenvolvimento/testes - Monitoração o estado da API - Documentação e testes de integração

TRANSCRIPT

@wandi wandi.darko@gmail.com

296 É O NÚMERO DE VISITAS AOS LOCAIS CADASTRADOS NO

MILHÕES

Sobre APONTADOR

NOS ÚLTIMOS 12 MESES

APONTADOR.COM.BR

DE LOCAIS CADASTRADOS. MILHÕES 7.5 presença em todas as 5.565 cidades do Brasil.

17 MILHÕES DE USUÁRIOS VISITAM APONTADOR.COM.BR TODO MÊS.

3MILHÕES

DE OPINIÕES SOBRE LOCAIS SÃO COMPARTILHADAS ENTRE OS USUÁRIOS.

13 MILHÕES

DE TELEFONES COMERCIAS SÃO ENCONTRADOS NO APONTADOR.

1 em cada 5 brasileiros acessam Apontador

procurando por locais ou serviços.

•  Uma$auten)cação$que$funcione$

– E$que$funcione$também$no$celular$

•  Flexibilidade$para$o$)me$de$negócios$

•  Velocidade$na$entrega$de$novas$funcionalidades$

•  Velocidade$no$tempo$de$resposta$

•  Maior$compa)bilidade$com$REST$

•  Design$for$Opera)ons$•  Ahhh$e$que$seja$fácil$de$usar$

A missão da nova API (V2)

•  Rever$o$Modelo&de&Domínio&•  Modelo$Flexível:$Novos&Endpoints&•  Segurança:$OAuth2&•  Uso$de$Frameworks&•  Performance:$Escrita$Assíncrona$e$Caching$•  Melhores&prá@cas&REST$•  Design$for$Opera)ons:$Self&Tests&•  Console$de$desenvolvimento:$API&Playground&

//COMOFAZ?

•  Defina$o$modelo&de&domínio&– Não$dá$para$começar$sem$isso$

– Conheça$sua$empresa$(e$as$outras…)$

– Oportunidades$para$melhorar$

•  Hipermídia&– Como$os$objetos$de$domínio$se$relacionam?$

•  Definir$endpoints$– Cuidado$com$verbos$(REST$como$RPC)$

– Os$endpoints$são$o$limite&do&@me&de&negócio&

Começando com REST

Apontador API-V2

OAUTH2

•  Evolução$do$protocolo$OAUTH$1$(2007)$•  Simplicidade:$Novos$Fluxos$

•  Adeus$compa)bilidade,$novo$protocolo$

•  Tudo$HTTPS$•  Homens$Trabalhando:$DraY$31$

OAUTH2: Como vendi a idéia

•  MicrosoY,$Google,$Facebook,$Foursquare$

•  Um$fluxo$para$celulares$

•  Login$em$aplicações$na)vas$

•  //FIXME$correção$da$implementação$anterior$

•  SIMPLICIDADE$

curl$cX$POST$cd$

"client_id=QConSP2013&client_secret=PJHh01pWG1sbcq43vsOgAiXtA2C~&grant_type=client_creden)als"$hips://api.apontador.com.br/v2/oauth/token$

curl$cX$GET$cH$"Accept:$applica)on/json"$cH$"Authoriza)on:$Bearer$

2ab795caX71bcX45bbX8e48X40aa335a816d"$hips://api.apontador.com.br/v2/

places?q=pizzaria$

OAUTH2

OAUTH2

hips://api.apontador.com.br/v2/oauth/authorize?

client_id=QConSP2013&redirect_uri=hip://seuhost/

&scope=read&response_type=code$

hip://seuhost/?code=ufXpQ8$

curl$hips://api.apontador.com.br/v2/oauth/token$cd$

"code=ufXpQ8&client_id=QConSP2013&client_secret=PJHh01pWG1sbcq43vsOgAiXtA2C~&redirect_uri=hip://

seuhost/&grant_type=authoriza)on_code"$

Apontador REST API-V2

URI$Design$ $$

Plural$para$coleções$ /places$

Iden)ficação$ /places/M25GJ288$

Associações$ /places/M25GJ288/reviews$

HTTP$ GET$PUT$POST$DELETE$

Conteúdo$ JSON$/$XML$

Paginação$ ?start=10&rows=10$

Busca$livre$ /places?q=pizzaria$

Conteúdo$parcial$ /places?q=pizzaria&fl=name,phones$

Verbos?$ /users/6715779712/resetPassword$

camelCase$ createdAt$

Versionamento$ hips://api.apontador.com.br/v2/places$

APIGEE console

Apontador API-V2

STATUS$ $$

200$OK$

201$Created$

202$Accepted$

204$No$Content$

301$Moved$Permanently$

400$Bad$Request$

401$Unauthorized$

402$Payment$Required$

403$Forbidden$

404$Not$Found$

405$Method$Not$Allowed$

409$Conflict$

410$Gone$

413$Request$En)ty$Too$Large$

420$Enhance$your$calm$

429$Too$Many$Requests$

500$Internal$Server$Error$

503$Service$Unavailable$

Arquitetura e Frameworks

Linguagens$ Storage$ Frameworks$ Outros$

Java$ Oracle$ Spring$ Nginx$

Redis$ Tomcat$

Ac)veMQ$

Solr$

Spring

Aspectos: Perf4J + Splunk

Spring

REDIS

•  Cache$Chave=Valor$•  Escrita$/$Leitura$separados$•  Resiliência$e$Performance$

•  Ranking$•  Armazenamento$temporário$

Monitoração

Monitoração

@wandi wandi.darko@gmail.com

Q&A$

top related