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 retorno
HATEOAS (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 Sucesso
201 OK Novo recurso foi criado
204 OK O recurso foi removido
304 Not Modified O cliente pode usar dados do cache
400 Bad Request Requisição inválida
401 Unauthorized Requisição deve ser autenticada
403 Forbidden Acesso negado
404 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 sandbox
Vantagens
• 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
App
User
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 dados
Quando 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

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

  • 1.
    Construindo Web APIsem Java na era do Big Data Eduardo Lopes e Daniela Akagui
  • 2.
    Por que criaruma api na era do Big Data?
  • 3.
    Você já teveproblemas para fazer integração com uma api?
  • 4.
    Alguns problemas para consumiruma api • Documentação • Sem sandbox para testes • Falta de padrão nos contratos • Falta de suporte • Desorganização nos serviços
  • 5.
    E se vocêestivesse do outro lado?
  • 6.
    Acredita-se que otermo surgiu na Microsoft nos anos 80s “Eat Your Own Dogfood.” Steve Yegge “Start with a Platform, and Then Use it for Everything.”
  • 7.
    O que issosignifica? A Amazon consome sua própria api e adotou o desenvolvimento voltado a api como uma das principais regras internas.
  • 8.
    E quais sãoos 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
  • 9.
    Padronização no ciclode desenvolvimento voltado a api Organização dos times de desenvolvimento: http://www.mock-server.com/
  • 10.
    Padronização no ciclode desenvolvimento voltado a api Documentação da api e ambiente de testes: http://swagger.io/ http://netflix.github.io/genie/docs/api/
  • 11.
    Padronização no ciclode 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
  • 12.
    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}
  • 13.
    RESTFUL web Api URLse 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
  • 14.
    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)
  • 15.
    Tipos de retorno HATEOAS(Hypermedia as the Engine of Application State) http://projects.spring.io/spring-hateoas/
  • 16.
    Códigos de retorno StatusCode Status Text Ação 200 OK Sucesso 201 OK Novo recurso foi criado 204 OK O recurso foi removido 304 Not Modified O cliente pode usar dados do cache 400 Bad Request Requisição inválida 401 Unauthorized Requisição deve ser autenticada 403 Forbidden Acesso negado 404 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
  • 17.
    Já organizei meutime. Já escolhi um padrão.
  • 18.
    Testes na api •Testes Unitários • Testes de Integração • Ambiente de sandbox
  • 19.
  • 20.
  • 21.
    Ambiente de sandbox Vantagens •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
  • 22.
    Segurança • Escolha dométodo de autenticação • Validação de acesso por tenant • Verificação de Dos • Criptografia de dados • Validação de todos os objetos
  • 23.
    Escolha do métodode autenticação Resources App Authorization server User OAuth Resources App User Custom
  • 24.
  • 25.
    • Restringir númerode acessos por token • Restringir número de acessos por ip Verificação de Dos (Denial of service)
  • 26.
    Criptografia de dados Quandoos 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
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
    Conclusão O principal deuma api é a definição de processos e uso de boas práticas durante o ciclo de desenvolvimento.
  • 32.