Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Simplificando APIs Rest

Simplificando APIs Rest

Apresentação fala sobre alguns padrão que devemos tentar seguir para facilitar a integração de novos clientes, evolução e manutenção de uma API.

Avatar for Mattheus Cassundé

Mattheus Cassundé

September 26, 2020
Tweet

More Decks by Mattheus Cassundé

Other Decks in Programming

Transcript

  1. API

  2. API

  3. API

  4. • URI • Recursos • Operações • Versionamento • Media

    Types • Status & Erros Code • Filtro e Paginações • Segurança (Inicial) 8 Padrões
  5. • URI • Recursos • Operações • Versionamento • Media

    Types • Status & Erros Code • Filtro e Paginações • Segurança (Inicial) 8 Padrões
  6. • URI • Recursos • Operações • Versionamento • Media

    Types • Status & Erros Code • Filtro e Paginações • Segurança (Inicial) 8 Padrões
  7. • Funcionalidades bem definidas oferecidas pela API • Como uma

    instância de um objeto ◦ Métodos fixos (POST, GET, PUT, DELETE) ◦ Sempre o mesmo corpo nas repostas Recursos
  8. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos
  9. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos • /orders
  10. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos • /orders
  11. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos • /orders • /orders/{id} • /orders/{id} • /orders/{id}
  12. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos • /orders • /orders/{id} • /orders/{id} • /orders/{id}
  13. • Criar pedido • Cancelar um pedido • Buscar um

    pedido • Atualizar um pedido Recurso: Pedidos • /orders • /orders/{id} • /orders/{id} • /orders/{id}
  14. • URI • Recursos • Operações • Versionamento • Media

    Types • Status & Erros Code • Filtro e Paginações • Segurança (Inicial) 8 Padrões
  15. Operações - Verbos HTTP GET POST PUT PATCH DELETE Buscas

    Criação Atualiza todo o objeto Atualiza uma parte do objeto
  16. Operações - Verbos HTTP GET POST PUT PATCH DELETE Buscas

    Criação Atualiza todo o objeto Atualiza uma parte do objeto Remove um objeto
  17. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos /orders/123
  18. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido /orders/123
  19. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA /orders/123
  20. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123
  21. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123 Retorna pedido 123
  22. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123 Retorna pedido 123 NADA
  23. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123 Retorna pedido 123 NADA Atualiza todo pedido 123
  24. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123 Retorna pedido 123 NADA Atualiza todo pedido 123 Atualiza uma parte do pedido 123
  25. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

    /orders Retornar todos os pedidos Criar um pedido NADA NADA NADA /orders/123 Retorna pedido 123 NADA Atualiza todo pedido 123 Atualiza uma parte do pedido 123 Remove o pedido 123
  26. { "product":"beer", "amount": 10 } POST - Criação POST /orders

    { "id":"12313132131312" } Response Identificador do recurso recém criado
  27. [ { "id":"12313132131312" "product": "beer", "amount": 15, "sentEmail" : false,

    "taxed": true } ] GET /orders no body GET - Resgate Response
  28. [ { "id":"12313132131312" "product": "beer", "amount": 15, "sentEmail" : false,

    "taxed": true } ] GET /orders no body GET - Resgate Response
  29. { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }

    GET /orders/010101 no body GET - Resgate Response Identificador do recurso recém criado
  30. { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }

    PUT /orders/010101 PUT - Atualização completa
  31. • URI • Recursos • Operações • Versionamento • Media

    Types • Status & Erros Code • Filtro e Paginações • Segurança (Inicial) 8 Padrões
  32. Mas esse tal de Contrato ? { "id":"12313132131312" "product": {

    "id":"12313132131312", "name":"beer" }. . . } { "id":"12313132131312" "product": "beer", "amount": 15, "sentEmail": false, "taxed": true } V2 V1
  33. Formatos Padronizados • application/json • application/xml Media Type Request •

    Accept: application/json Response • Content-type: application/json
  34. • 100 - Informação • 200 - Resultado OK •

    300 - Redirecionamento • 400 - Erro no Client • 500 - Erro no Server Status & Error Code
  35. { "product":"beer", "amount": 10 } POST - Criação POST /orders

    { "id":"12313132131312" } Status code - 201 - Created
  36. { "product":"beer", "amount": 10 } POST - Criação POST /orders

    { "errorCode":"GBDD19" } Status code - 500 - Server Error
  37. { "product":"beer", "amount": "10" } POST - Criação POST /orders

    { "error":"amount invalid" } Status code - 400 - Bad Request
  38. [ { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true

    } ] GET /orders no body GET - Resgate Status code - 200 - Ok
  39. GET /orders/010101 no body GET - Resgate { "product": "beer",

    "amount": 15, "sentEmail": false, "taxed": true } Status code - 200 - Ok
  40. Dependendo do recurso é inviável retornar todos os itens no

    GET /orders Mas precisamos garantir a flexibilidade Filtros
  41. Filtros [ { "product": "beer", "amount": 15, "sentEmail": false, "taxed":

    true }, { "product": "sanduba", "amount": 20, "sentEmail": false, "taxed": false } ]
  42. Escolhemos os atributos que fazem sentido termos como filtro Filtros

    [ { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }, { "product": "sanduba", "amount": 20, "sentEmail": false, "taxed": false } ]
  43. Escolhemos os atributos que fazem sentido termos como filtro Filtros

    [ { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }, { "product": "sanduba", "amount": 20, "sentEmail": false, "taxed": false } ]
  44. Definir um limite de dados retornados em nossa API é

    importante para garantirmos nosso tempo de resposta Paginação
  45. Básico • Sempre usar https • Nunca expor dados sensíveis

    na URL Segurança Avançado • Basic Authorization: Basic <credential> • JWT | Authorization: Bearer <credential> • OAuth 2.0