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.

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