Upload
tdc-globalcode
View
111
Download
1
Embed Size (px)
Citation preview
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.