API Apontador

644 views

Published on

apresentação sobre a API do Apontador no devshare

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
644
On SlideShare
0
From Embeds
0
Number of Embeds
226
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

API Apontador

  1. 1. API Apontador usando SpringDenis Tiago (@denistiago)Leonardo Andreucci (@leoandreucci)
  2. 2. No começo tínhamos o Apontador
  3. 3. Daí colocamos um CDN
  4. 4. Criamos um back-end em Java
  5. 5. Que passou a servir clientes mobile
  6. 6. E passou a servir uma API...
  7. 7. Mas esse back-end deveria ser a API
  8. 8. E assim começa o projeto API v2
  9. 9. Algumas motivaçõesManutenibilidade  Uso de frameworks  Injeção de dependência  Reduzir código de infraestrutura  Converter procedures para código java
  10. 10. Algumas motivaçõesAutenticação  Ampliar suporte Oauth  Provider Oauth  Segurança declarativa
  11. 11. Algumas motivaçõesMelhorias e padronização nos serviços Rest Correção de alguns problemas conceituais PUT /v1/places/new POST /v2/places
  12. 12. Algumas motivaçõesMelhorias e padronização nos serviços Rest Negociação de conteudo GET /v2/places/4Q287294 (default JSON) GET /v2/places/4Q287294?wt=xml GET /v2/places/4Q287294 Accept:application/json
  13. 13. Algumas motivaçõesMelhorias e padronização nos serviços Rest Resposta Parcial GET /v2/places/4Q287294?fl=name,categories Free Search (lucene query sintax) GET /v2/search/?q=pizzaria&fq=city:"sao paulo" AND district:mooca GET /v1/search/places/byaddress GET /v1/search/places/byzipcode...(etc)
  14. 14. Algumas motivaçõesPadronização de nomes[twitter, apontador] created_at[bing] DateTime[foursquare] createdAtJavascript:var myObject = JSON.parse(response); myObject.created_at; myObject.createdAt;
  15. 15. Algumas motivaçõesPadronização http status code (Rfc2616 – SEC 10 ) POST /users - 201 Created POST /places/M25GJ288/photos - 202 Accepted PUT /users/me – 204 No Content GET /places/bananaxxxxxxx – 204 Not Found POST /users – 409 Conflict POST /users - 401 Unauthorized (não authenticado) POST /users – 403 Forbidden Etc...
  16. 16. E a compatibilidade?
  17. 17. Por que Spring? Rest ( spring-mvc ) Segurança ( spring-security ) Oauth 2 provider ( spring-security-oauth ) Integração com redes sociais ( spring-social ) Cache Abstração ( Jdbc, Redis, Jms, Velocity, Sendgrid, Neo4j, CouchDb, etc... ) Aspectos SpringTestRunner
  18. 18.  Expondo um endpoint Rest@RequestMapping(method = GET, value="/places/{placeId}")public Place getPlace(@PathVariable String placeId,@RequestParam(value = "wt", required = false) String wt,@RequestParam(value = "fl", required = false) String fl) { return searchService.searchPlace(placeId,wt,fl);}
  19. 19.  Habilitando segurança para alguns recursos<http...> <intercept-url pattern="/users/.*" access="hasRole(ROLE_USER) and #oauth2.hasScope(read)" method="GET" /> <intercept-url pattern="/users/.*" access="#oauth2.isUser()" method="POST" /> <intercept-url pattern="/users/.*" access="#oauth2.isUser()" method="PUT" /></http...>@PreAuthorize("ROLE_TRUSTED")public void savePlace(Place place) {}
  20. 20.  Cacheando resultado de uma consulta do banco@Cacheable("PlaceCache")public Place getPlace(String placeId) { return repository.get(placeId);} E agora como expira ?@CacheEvict(value="PlaceCache",key="#place.placeId")public void save(Place place) { return repository.save(place);}
  21. 21.  Quero habilitar login com redes sociais.@EnableTwitter(appid=”xxx”,appsecret=”yyy”)@EnableFacebook(appid=”xxx”,appsecret=”yyy”)public class SocialConfig { //some mapping user redirect after login}==================================Botão de login<form id="tw_signin" action="/signin/twitter"" method="post"><button type="submit">Logar com twitter</button> </form>
  22. 22.  Quero realizar testes de integração sem poluir o banco de dados.@Test(expected=ConflicException.class)@Rolback@Transactionalpublic void shouldThrowConflictExceptionForDuplicatedCheckin{ Checkin checkin = newCheckin(); checkinService.create(checkin); checkinService.create(checkin);}
  23. 23. API Consolehttp://apiv2-hom.no-ip.org/v2/console.jsp
  24. 24. Legal! Mas o que é possível fazer com a API do Apontador?• Buscar locais em nossa base de 7,5 milhões de POIs• Fazer buscas por cidade, bairro, proximidade• Obter avaliações, fotos e todos os detalhes de um local• Cadastrar locais, avaliações, fotos, check-ins• Utilizar a mecânica de jogos do Apontador
  25. 25. Desenvolvedores• Utilizem em suas aplicações• Nos passem feedback• É gratuita! FIM!

×