Skip to content

Latest commit

 

History

History
372 lines (256 loc) · 11.8 KB

README.pt.md

File metadata and controls

372 lines (256 loc) · 11.8 KB

API de Software de Gestão de Frotas

Índice


1. Preâmbulo

De acordo com Wikipedia, a internet das coisas (IoT, em inglês) é um conceito que se refere à interconexão digital de objetos cotidianos com a internet. Constitui uma mudança radical na qualidade de vida das pessoas na sociedade, oferecendo muitas novas oportunidades de acesso a dados, serviços específicos na educação, segurança, assistência médica e transporte, entre outros campos.

Em logística e gestão de frotas de automóveis, por exemplo, é possível rastrear a localização e as condições da carga e dos veículos o tempo todo, por meio de sensores sem fio conectados à internet que enviam alertas em caso de eventualidades (atrasos, danos, roubos, etc).

zach-vessels-utMdPdGDc8M-unsplash

A IoT também apresenta desafios como o armazenamento, análise e visualização da grande quantidade de informações que ela gera. Estima-se que até 2025, os dispositivos IoT gerem 79,4 zettabytes (1 zettabyte equivale a 1 trilhão de gigabytes). Como desenvolvedoras, devemos estar cientes desses desafios e contribuir para sua resolução com nossa experiência, conhecimento e vontade de aprender.

2. Resumo do projeto

Neste projeto, você construirá a API REST de um Software de Gestão de Frotas para consultar as localizações dos veículos de uma empresa de táxis em Pequim, China.

Forneceremos milhões de localizações de milheres de táxis. Esperamos que, como desenvolvedora, você explore novas alternativas e técnicas para armazenar e consultar essa grande quantidade de informações e possa garantir a melhor experiência do usuário em sua API REST.

3. Objetivos de aprendizagem

Refletir e depois marcar os objetivos que você entendeu e aplicou em seu projeto. Pense nisso ao decidir sua estratégia de trabalho.

Java & OOP

  • Tipos de dados primitivos

  • Tipos de dados: primitivos vs não primitivos

  • Strings (cadeias de caracteres)

  • Arrays (matrizes)

  • Modificadores de acesso: private

  • Modificadores de acesso: protected

  • Modificadores de acesso: public

  • Programação Orientada a Objetos (OOP)

    • Classes
    • Objetos
    • Métodos
    • Atributos
    • Construtores
    • Encapsulamento
    • Abstração
    • Composição
    • Interfaces
    • Herança: super
    • Herança: extends
    • Herança: overrride
    • Linguagem Unificada de Modelagem (UML): Diagramas de classes
  • Variáveis

  • Condicionais

  • Uso de loops/ciclos

  • Coleções

    • Listas: ArrayList
    • Mapas: HashMap
    • Conjuntos: HashSet
  • Testes

    • JUnit
    • Mockito

Spring Framework

Links

  • Spring initializr

  • Conceitos Principais

Links

  • Beans
  • Inversão de Controle (IoC)
  • Anotações
  • Spring Boot

Links

  • Servlets
  • Controllers
  • Services
  • Spring Data JPA

Links

  • Entidade
  • Repositório
  • Spring Web

Links

  • REST Controller
  • RequestMapping
  • RequestParam
  • Testes

    • Teste Spring
    • Hamcrest

Hibernate ORM

Links

  • Configuração e Entidades

  • Mapeamento de Entidades

Links

  • Entidades
  • Tabelas
  • Colunas
  • Chave Primária
  • Chave Estrangeira (Relacionamentos)
  • Campos Básicos
  • Campos Temporais
  • JPQL (Java Persistence Query Language)

Banco de Dados & SQL

Links

  • Sistemas de Gerenciamento de Banco de Dados (SGBD)
  • DDL (Data Definition Language): CREATE, ALTER, DROP
  • DML (Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE
  • Consultas SQL: JOIN
  • Índices
  • Transações
  • Programação com SQL

APIs & REST

Links

  • RESTful API
  • Recursos e Rotas (Endpoints)
  • Métodos HTTP: GET, POST, PUT, DELETE
  • Status HTTP: 200, 201, 204, 400, 401, 403, 404, 500
  • JSON (JavaScript Object Notation)

Deploy

Links

  • Variáveis de Ambiente

Fundamentos

Links

  • Documentação

Versionamento

Links

  • Git
  • GitHub

4. Critérios de aceitação do projeto

Refletir e marcar as opções que você seguiu ao desenvolver seu projeto.

Back-end

  • 1. Injeção de Dependências

    • A aplicação deve utilizar injeção de dependências do Spring (@Autowired ou @Inject).
  • 2. Modelos de Dados

    • A aplicação deve definir modelos de dados para representar as entidades do sistema.
  • 3. Repositórios de Dados

    • A aplicação deve implementar repositórios de dados (DAOs) para acessar as entidades do sistema no banco de dados.
  • 4. Controladores REST

    • A aplicação deve implementar controladores REST para expor os recursos do sistema por meio da API.
  • 5. Testes de Unidade

    • A aplicação deve conter testes de unidade automatizados.
  • 6. Documentação

    • A aplicação deve conter uma documentação em Markdown que explique os endpoints, modelos e funcionalidades do sistema.
  • 7. Testes de Integração

    • A aplicação deve conter testes de integração automatizados.

Documentação

  • 8. Modelo Base
    • A documentação deve seguir o modelo base fornecido acima.

Extras

Links

  • 9. Docker

    • A aplicação deve utilizar Docker para ser executada em um contêiner.
  • 10. Banco de Dados em Nuvem

    • A aplicação deve ser hospedada em um serviço de banco de dados em nuvem.
  • 11. Uso de Cache

    • A aplicação deve utilizar caching para melhorar o desempenho em operações que são frequentemente executadas.
  • 12. Mensageria

    • A aplicação deve implementar comunicação assíncrona por meio de uma fila de mensagens.

Front-end

  • 13. Interface de Usuário
    • A aplicação deve ter uma interface de usuário (pode ser em qualquer tecnologia).

Deploy

  • 14. Deploy
    • A aplicação deve ser implantada e acessível na web.

5. Stack de tecnologia

O propósito dessa seção é definir um conjunto de tecnologias que você possa utilizar como ponto de partida para desenvolver o projeto. A escolha final das tecnologias é sua, mas essa lista pode servir como um guia.

  • Linguagem: Java
  • Framework Back-end: Spring Boot
  • Framework ORM: Hibernate
  • Banco de Dados: PostgreSQL ou MySQL
  • Documentação: Markdown
  • Gerenciamento de Dependências: Maven
  • Controle de Versão: Git / GitHub
  • Deploy: Heroku ou AWS
  • Docker (opcional)
  • Banco de Dados em Nuvem (opcional)
  • Uso de Cache (opcional)
  • Mensageria (opcional)
  • Interface de Usuário (opcional)

6. Modelo Base

7. Dicas, dicas e leituras complementares

Links

8. Edição Hacker

Você pode explorar as seções do desafio que mais te interessam e escolher as histórias de usuário e épicos que mais te chamam a atenção, definindo suas próprias prioridades de acordo com seus objetivos de aprendizado e nível de confiança. Boa sorte!