- 1. Preâmbulo
- 2. Resumo do projeto
- 3. Objetivos de aprendizagem
- 4. Critérios de aceitação do projeto
- 5. Stack de tecnologia
- 6. Modelo Base
- 7. Dicas, guias e leituras complementares
- 8. Edição Hacker
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).
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.
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.
Refletir e depois marcar os objetivos que você entendeu e aplicou em seu projeto. Pense nisso ao decidir sua estratégia de trabalho.
-
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
-
- 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
-
- Listas: ArrayList
- Mapas: HashMap
- Conjuntos: HashSet
-
- JUnit
- Mockito
-
Spring
initializr
- Beans
- Inversão de Controle (IoC)
- Anotações
- Servlets
- Controllers
- Services
- Entidade
- Repositório
- REST Controller
- RequestMapping
- RequestParam
-
- Teste Spring
- Hamcrest
-
Configuração e Entidades
- Entidades
- Tabelas
- Colunas
- Chave Primária
- Chave Estrangeira (Relacionamentos)
- Campos Básicos
- Campos Temporais
- JPQL (Java Persistence Query Language)
- 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
- 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)
- Variáveis de Ambiente
- Documentação
- Git
- GitHub
Refletir e marcar as opções que você seguiu ao desenvolver seu projeto.
-
1. Injeção de Dependências
- A aplicação deve utilizar injeção de dependências do
Spring (
@Autowired
ou@Inject
).
- A aplicação deve utilizar injeção de dependências do
Spring (
-
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.
- 8. Modelo Base
- A documentação deve seguir o modelo base fornecido acima.
-
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.
- 13. Interface de Usuário
- A aplicação deve ter uma interface de usuário (pode ser em qualquer tecnologia).
- 14. Deploy
- A aplicação deve ser implantada e acessível na web.
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)
Links
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!