tdc2016sp - construindo web apis em java na era do big data

Post on 15-Apr-2017

109 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Construindo Web APIs em Java na era do Big Data

Eduardo Lopes e Daniela Akagui

Por que criar uma api na era do Big Data?

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

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

E se você estivesse do outro lado?

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.”

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

das principais regras internas.

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

Padronização no ciclo de desenvolvimento voltado a api

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

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/

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

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}

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

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)

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

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

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

Já organizei meu time.

Já escolhi um padrão.

Testes na api

• Testes Unitários

• Testes de Integração

• Ambiente de sandbox

Testes Unitários

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

Testes Integração

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

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

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

Escolha do método de autenticação

Resources

App

Authorization server

User

OAuth

Resources

AppUser

Custom

Validação de acesso por tenant

• Restringir número de acessos por token

• Restringir número de acessos por ip

Verificação de Dos(Denial of service)

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

Validação de todos os objetos

Performance

• Cache

• Chamadas assíncronas

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

Chamadas assíncronas

Conclusão

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

Perguntas?

Daniela Akagui daniela.akagui@tail.digital

Eduardo Lopes eduardo.lopes@tail.digital

top related