32
Construindo Web APIs em Java na era do Big Data Eduardo Lopes e Daniela Akagui

TDC2016SP - Construindo Web APIs em Java na era do Big Data

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Construindo Web APIs em Java na era do Big Data

Eduardo Lopes e Daniela Akagui

Page 2: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Por que criar uma api na era do Big Data?

Page 3: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Você já teve problemas para fazer integração com uma api?

Page 4: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Alguns problemas para consumir uma api

• Documentação

• Sem sandbox para testes

• Falta de padrão nos contratos

• Falta de suporte

• Desorganização nos serviços

Page 5: TDC2016SP - Construindo Web APIs em Java na era do Big Data

E se você estivesse do outro lado?

Page 6: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Acredita-se que o termo surgiu na Microsoft nos anos 80s

“Eat Your Own Dogfood.”

Steve Yegge

“Start with a Platform, and Then Use it for Everything.”

Page 7: TDC2016SP - Construindo Web APIs em Java na era do Big Data

O que isso significa?A Amazon consome sua própria api e adotou o desenvolvimento voltado a api como uma

das principais regras internas.

Page 8: TDC2016SP - Construindo Web APIs em Java na era do Big Data

E quais são os problemas quando você começa a criar a sua própria api?

• Padronização no ciclo de desenvolvimento voltado a api

• Testes na api

• Segurança por client/tenant

• Performance

• Documentação

• Sem sandbox para testes

• Falta de padrão nos contratos

• Desorganização nos serviços

Page 9: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Padronização no ciclo de desenvolvimento voltado a api

Organização dos times de desenvolvimento: http://www.mock-server.com/

Page 10: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Padronização no ciclo de desenvolvimento voltado a api

Documentação da api e ambiente de testes:

http://swagger.io/

http://netflix.github.io/genie/docs/api/

Page 11: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Padronização no ciclo de desenvolvimento voltado a api

Organização dos serviços e nomenclatura

Para construir uma Web API é necessário construir um contrato no qual estarão definidos os dados de entrada e

saída e em qual formato devem ser trocados.

RESTFUL web Api• Definição de Recursos • Definição de URLs e métodos • Tipos de retorno

Page 12: TDC2016SP - Construindo Web APIs em Java na era do Big Data

RESTFUL web Api Recursos

URIs - Uniform Resource Identifier

• Defina uma Interface Uniforme • Use substantivos e não verbos • Use substantivos no plural • Use subresources para representar relacionamentos • Versione sua api

/api/v1/users /api/v1/users/{userId} /api/v1/users/{userId}/adresses /api/v1/users/{userId}/adresses/{adressId}

Page 13: TDC2016SP - Construindo Web APIs em Java na era do Big Data

RESTFUL web Api URLs e métodos

HTTP Exemplo Ação

GET /users Lista todos os usuários

GET /users/{userId} Retorna um usuário com base no id

POST /users Cria um novo usuário

PUT /users/{userId} Atualiza o usuário

DELETE /users/{userId} Remove o usuário

Page 14: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Tipos de retorno"links": { "self": "http://example.com/articles", "next": "http://example.com/articles?page[offset]=2", "last": "http://example.com/articles?page[offset]=10" },"included": [{ "type": "people", "id": "9", "attributes": { "first-name": "Dan", "last-name": "Gebhardt", "twitter": "dgeb" }, "links": { "self": "http://example.com/people/9" } }]

"data": [{ "type": "articles", "id": "1", "attributes": { "title": "JSON API paints my bikeshed!" }, "relationships": { "author": { "links": { "self": "http://example.com/articles/1/relationships/author", "related": "http://example.com/articles/1/author" }, "data": { "type": "people", "id": "9" } } }, "links": { "self": "http://example.com/articles/1" } }],

{

}http://jsonapi.org/

HATEOAS (Hypermedia as the Engine of Application State)

Page 15: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Tipos de retornoHATEOAS (Hypermedia as the Engine of Application State)

http://projects.spring.io/spring-hateoas/

Page 16: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Códigos de retorno Status Code Status Text Ação

200 OK Sucesso201 OK Novo recurso foi criado204 OK O recurso foi removido304 Not Modified O cliente pode usar dados do cache400 Bad Request Requisição inválida401 Unauthorized Requisição deve ser autenticada403 Forbidden Acesso negado404 Not found There is no resource behind the URI.

422 Unprocessable Entity Servidor não pôde processar a entidade

500 Internal Server Error Erro genérico, esse tipo de erro deve ser tratado no servidor e não retornado

Page 17: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Já organizei meu time.

Já escolhi um padrão.

Page 18: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Testes na api

• Testes Unitários

• Testes de Integração

• Ambiente de sandbox

Page 19: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Testes Unitários

http://www.eclemma.org/jacoco/

Page 20: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Testes Integração

http://flapdoodle-oss.github.io/de.flapdoodle.embed.mongo/

Page 21: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Ambiente de sandboxVantagens

• Aumento da produtividade • Testes mais confiáveis • Evita testes em produção • Aumenta a satisfação do usuário

Pontos de atenção • Production like • Atualização dos dados • Avaliar operações que devem ser executadas

Page 22: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Segurança• Escolha do método de autenticação

• Validação de acesso por tenant

• Verificação de Dos

• Criptografia de dados

• Validação de todos os objetos

Page 23: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Escolha do método de autenticação

Resources

App

Authorization server

User

OAuth

Resources

AppUser

Custom

Page 24: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Validação de acesso por tenant

Page 25: TDC2016SP - Construindo Web APIs em Java na era do Big Data

• Restringir número de acessos por token

• Restringir número de acessos por ip

Verificação de Dos(Denial of service)

Page 26: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Criptografia de dadosQuando os dados do cliente forem sensíveis eles devem ser criptografados mesmo que a comunicação seja via https.

Segundo a OWASP, nesses casos a chave de criptografia deve ser conhecida apenas pelo cliente.

https://www.owasp.org/index.php/Guide_to_Cryptography

Page 27: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Validação de todos os objetos

Page 28: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Performance

• Cache

• Chamadas assíncronas

Page 29: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Cache

https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/

http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/CacheControl.html

Page 30: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Chamadas assíncronas

Page 31: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Conclusão

O principal de uma api é a definição de processos e uso de boas práticas durante o ciclo de desenvolvimento.

Page 32: TDC2016SP - Construindo Web APIs em Java na era do Big Data

Perguntas?

Daniela Akagui [email protected]

Eduardo Lopes [email protected]