Esse repositório contém a resolução do segundo projeto prático da disciplina de Sistemas Distribuídos (STD29006).
- Projeto Proposto
- Funcionalidades Implementadas
- Executando o Projeto
- Consumindo o Serviço com o Curl
- Documentação
A API modelada de um Serviço Web RESTful é voltada para uma central de automação residencial que deve permitir aplicações desenvolvidas por terceiros interagir com essa central para controlar os dispositivos inteligentes associados à esta.
A central de automação residencial possibilita controlar diversos dispositivos inteligentes de uma residência, tais como: lâmpadas, TV, sistema de som, ar condicionado, cortinas, portões eletrônicos, etc. Por meio da API RESTful o usuário pode agrupar os dispositivos em ambientes (i.e. sala, quarto, etc.), definir cenários que deseja o funcionamento dos dispositivos (i.e. fim de semana, amanhecer durante semana, etc.) e interagir diretamente com os dispositivos (i.e. ligar, desligar, ver a temperatura atual, volume atual, etc.). Para mais informações consulte o arquivo do Projeto.
- Implementação desenvolvida em Java
- Documentação com OpenAPI
- Agrupar dispositivos em ambientes
- Definir cenários
- Interagir diretamente com os dispositivos
Após realizar o clone do repositório e estar no diretório raiz do mesmo, o seguinte comando deve ser executado:
./gradlew bootRun
Se tudo der certo, o servidor spring boot
estará rodando, com isso, é possível consumir o serviço com curl
em um terminal. O servidor estará rodando no endereço http://localhost:8080/
Abaixo está disponível os comando curl
para consumir os serviços da API RESTful,
em que é possível utilizar os métodos GET
, POST
, PUT
e DELETE
.
- Obter detalhes dos dispositivos
curl -X 'GET' 'http://localhost:8080/dispositivos' -H 'accept: application/json'
- Obter detalhes de um dispositivo
curl -X 'GET' 'http://localhost:8080/dispositivos/4' -H 'accept: application/json'
- Obter detalhes das lâmpadas
curl -X 'GET' 'http://localhost:8080/dispositivos/lampadas' -H 'accept: application/json'
- Obter detalhes de uma lâmpada
curl -X 'GET' 'http://localhost:8080/dispositivos/lampadas/1' -H 'accept: application/json'
- Interagir com uma lâmpada
curl -X 'PUT' 'http://localhost:8080/dispositivos/lampadas/1' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "lampada ao amanhecer","ligado": true,"intensidade": 4,"cor": "azul"}'
- Obter detalhes das tvs
curl -X 'GET' 'http://localhost:8080/dispositivos/tv' -H 'accept: application/json'
- Obter detalhes de uma única tv
curl -X 'GET' 'http://localhost:8080/dispositivos/tv/3' -H 'accept: application/json'
- Interagir com a tv
curl -X 'PUT' 'http://localhost:8080/dispositivos/tv/3' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "tv grande","ligado": true,"canal": 9,"volume": 25}'
- Obter detalhes dos sistemas de som
curl -X 'GET' 'http://localhost:8080/dispositivos/sistemaSom' -H 'accept: application/json'
- Obter detalhes de um único sistema de som
curl -X 'GET' 'http://localhost:8080/dispositivos/sistemaSom/4' -H 'accept: application/json'
- Interagir com o sistema de som
curl -X 'PUT' 'http://localhost:8080/dispositivos/sistemaSom/4' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "som ambiente","ligado":true,"volume": 20}'
- Obter detalhes dos ar condicionados
curl -X 'GET' 'http://localhost:8080/dispositivos/arCondicionado' -H 'accept: application/json'
- Obter detalhes de um único ar condicionado
curl -X 'GET' 'http://localhost:8080/dispositivos/arCondicionado/6' -H 'accept: application/json'
- Interagir com o ar condicionado
curl -X 'PUT' 'http://localhost:8080/dispositivos/arCondicionado/6' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "ar gelar","ligado":true,
"temperatura": 17}'
- Obter detalhes das cortinas
curl -X 'GET' 'http://localhost:8080/dispositivos/cortinas' -H 'accept: application/json'
- Obter detalhes de uma única cortina
curl -X 'GET' 'http://localhost:8080/dispositivos/cortinas/8' -H 'accept: application/json'
- Interagir com a cortina
curl -X 'PUT' 'http://localhost:8080/dispositivos/cortinas/8' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "cortina grande","aberto": true}'
- Obter detalhes dos portões
curl -X 'GET' 'http://localhost:8080/dispositivos/portoes' -H 'accept: application/json'
- Obter detalhes de um único portão
curl -X 'GET' 'http://localhost:8080/dispositivos/portoes/11' -H 'accept: application/json'
- Interagir com o portão
curl -X 'PUT' 'http://localhost:8080/dispositivos/portoes/11' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "portao da garagem","aberto": true}'
- Adicionar ambiente
curl -X 'POST' 'http://localhost:8080/ambientes' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "sala"}'
- Obter ambientes cadastrado
curl -X 'GET' 'http://localhost:8080/ambientes' -H 'accept: application/json'
- Adicionar dispositivos no ambiente
curl -X 'POST' 'http://localhost:8080/ambientes/1/dispositivos?id=4' -H 'accept: application/json' -d ''
- Adicionar outro dispositivo
curl -X 'POST' 'http://localhost:8080/ambientes/1/dispositivos?id=3' -H 'accept: application/json' -d ''
- Obter detalhes do ambiente
curl -X 'GET' 'http://localhost:8080/ambientes/1' -H 'accept: application/json'
- Alterar nome do ambiente
curl -X 'PUT' 'http://localhost:8080/ambientes/1?nome=quarto' -H 'accept: application/json'
- Deletar dispositivo do ambiente
curl -X 'DELETE' 'http://localhost:8080/ambientes/1/dispositivos?id=3' -H 'accept: */*'
- Deletar um ambiente
curl -X 'DELETE' 'http://localhost:8080/ambientes/1' -H 'accept: */*'
- Obter ambientes cadastrado
curl -X 'GET' 'http://localhost:8080/ambientes' -H 'accept: application/json'
- Adicionar um cenário
curl -X 'POST' 'http://localhost:8080/cenarios' -H 'accept: */*' -H 'Content-Type: application/json' -d '{"nome": "amanhecer","inicio": "7:00","fim":"8:00"}'
- Adicionar outro cenário
curl -X 'POST' 'http://localhost:8080/cenarios' -H 'accept: */*' -H 'Content-Type: application/json' -d '{ "nome": "fim de semana", "inicio": "sexta", "fim": "sabado"}'
- Adicionar um dispositivo no cenário criado
curl -X 'POST' 'http://localhost:8080/cenarios/amanhecer/dispositivos?id=1' -H 'accept: application/json' -d ''
- Obter lista de todos os cenários
curl -X 'GET' 'http://localhost:8080/cenarios' -H 'accept: application/json'
- Obter detalhes de um cenário específico
curl -X 'GET' 'http://localhost:8080/cenarios/amanhecer' -H 'accept: application/json'
- Altera dados de um cenário
curl -X 'PUT' 'http://localhost:8080/cenarios/amanhecer?nome=anoitecer&inicio=20&fim=21' -H 'accept:application/json'
- Deletar um dispositivo do cenário
curl -X 'DELETE' 'http://localhost:8080/cenarios/anoitecer/dispositivos?id=1' -H 'accept: */*'
- Deletar um cenário
curl -X 'DELETE' 'http://localhost:8080/cenarios/anoitecer' -H 'accept: */*'
- Obter lista de todos os cenários
curl -X 'GET' 'http://localhost:8080/cenarios' -H 'accept: application/json'
Essa API foi documentada de acordo com a especificação OpenAPI e a mesma pode ser visualizada em OpenAPI. O código fonte dessa documentação está disponível no arquivo api-automacao.yaml nesse repositório.