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

Um pouco sobre REST

Um pouco sobre REST

Apresentação de alguns padrões de uma Arquitetura REST

Mattheus Cassundé

September 26, 2020
Tweet

More Decks by Mattheus Cassundé

Other Decks in Programming

Transcript

  1. • Social - Pessoas estão compartilhando tudo a todo tempo.

    • Mobile - Usuário compartilha muito a todo momento usando Celular/IoT. • Cloud - Tudo rodando em algum lugar de maneira simples e escalável • Information - Tudo isso gera Informação
  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. • Criar pedido • Cancelar pedido • Buscar pedido •

    Atualizar um pedido API Pedidos • /order • /order/{id}/cancel • /order • /order/{id}
  6. • Criar pedido • Cancelar pedido • Buscar pedido •

    Atualizar um pedido API Pedidos • /order • /order/{id}/cancel • /order • /order/{id}
  7. • Criar cancelamento • Confirma cancelamento • Buscar cancelamento API

    Cancelamento de Pedidos • /cancel • /cancel/{id}/confirm • /cancel/{id}
  8. Operações - Verbos HTTP RECURSO GET POST PUT PATCH DELETE

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

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

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

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

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

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

    PUT /orders/010101 PUT - Atualização completa
  15. API

  16. API

  17. API

  18. Formatos Padronizados • application/json • application/xml Media Type Request •

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

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

    { "id":"12313132131312" } Status code - 201 - Created
  21. [ { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true

    } ] GET /orders no body GET - Resgate Status code - 200 - Ok
  22. { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }

    PUT /orders/010101 PUT - Atualização completa
  23. { "product": "beer", "amount": 15, "sentEmail": false, "taxed": true }

    PUT /orders/010101 PUT - Atualização completa Status code - 200 / 204 no body
  24. Dependendo do recurso é inviável retornar todos os itens no

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

    true }, { "product": "sanduba", "amount": 20, "sentEmail": false, "taxed": false } ]
  26. 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 } ]
  27. 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 } ]
  28. Definir um limite de dados retornados em nossa API é

    importante para garantirmos nosso tempo de resposta Paginação
  29. 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