API Rest que gerencia recurso "livro". Através dela pode-se se obter todos os livros cadastrados em formato paginado, obter livro por ID, atualizar, deletar e criar novo. Os dados são armazenados no banco de dados relacional Postgres.
É possível cadastrar novo livro desde que não exista livro já cadastrado com o mesmo nome.
A API possui validações simples como analisar se os campos não estão vazios ou possui quantidade de páginas maior que determinado valor.
O projeto possui arquivo sql para realizar seeding do banco de dados para que seja possível realizar operações com dados iniciais.
Toda vez que o projeto sobe, está configurado para que os dados no banco de dados sejam deletados.
Tech | Badge |
---|---|
Java 11 | |
Apache Maven | |
Spring Boot | |
Postgres | |
Postman | |
Foi escolhida para desenvolvimento e testes a plataforma Spring Tool Suite. Para executar o projeto, recomendo o uso da mesma.
Para testar e realizar requisições utilizou-se Postman
O banco utilizado no projeto foi Postgres
- Download e configuração da Spring Tool Suite
- Download e configuração do Postgres
- Download e configuração do Postman
- Realizar clone do projeto
git clone https://github.com/emeath/books-directory-java.git
- Configurar usuário e senha (postgres, postgres) (O usuário e senha padrão utilizados nesse projeto para conexão com o banco são postgres e postgres respectivamente. Sinta-se livre para alterar esses dados em src/main/resources/application.properties)
- Criar tabela no banco de dados Postgres com nome books-directory-api
- Importar projeto existente Maven
- No Boot Dashboard clicar em Start or restart the process associated with the selected elements
Importar collection
{
"info": {
"_postman_id": "6dc2578f-28fb-48f8-93d3-3bff227abeac",
"name": "books-directory-java",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "GET all books",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8080/book",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"book"
],
"query": [
{
"key": "page",
"value": "14",
"disabled": true
},
{
"key": "size",
"value": "1",
"disabled": true
}
]
}
},
"response": []
},
{
"name": "GET ONE book",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8080/book/10",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"book",
"10"
]
}
},
"response": []
},
{
"name": "DELETE book by id",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "http://localhost:8080/book/10",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"book",
"10"
]
}
},
"response": []
},
{
"name": "ADD book",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Game of Thronnes 13\",\n \"authorName\": \"Martin\",\n \"pages\": 222,\n \"genre\": \"Fantasia\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/book",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"book"
]
}
},
"response": []
},
{
"name": "UPDATE book",
"request": {
"method": "PUT",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Game of Thrones 2\",\n \"authorName\": \"Martin\",\n \"pages\": 1213,\n \"genre\": \"Fantasia\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/book/1",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"book",
"1"
]
}
},
"response": []
}
]
}
HTTP Method | Endpoint |
---|---|
GET |
/book |
GET |
/book/{id} |
DELETE |
/book/{id} |
POST |
/book |
PUT |
/book/{id} |
GET
http://localhost:8080/book/50
{
"id": 50,
"name": "Em Algum Lugar nas Estrelas",
"authorName": "Clare Vanderpool",
"pages": 288,
"genre": "Livros de Fantasia e Terror para Adolescentes"
}
GET
http://localhost:8080/book?page=5
{
"content": [
{
"id": 53,
"name": "Um Lugar Bem Longe Daqui",
"authorName": "Delia Owens",
"pages": 336,
"genre": "Drama Literatura e Ficção"
}
],
"pageable": {
"sort": {
"sorted": true,
"empty": false,
"unsorted": false
},
"pageNumber": 5,
"pageSize": 3,
"offset": 15,
"paged": true,
"unpaged": false
},
"last": true,
"totalPages": 6,
"totalElements": 16,
"first": false,
"size": 3,
"number": 5,
"sort": {
"sorted": true,
"empty": false,
"unsorted": false
},
"numberOfElements": 1,
"empty": false
}
DELETE
http://localhost:8080/book/10
Book not found!
DELETE
http://localhost:8080/book/50
Book deleted sucessfully!
POST
http://localhost:8080/book
Request Body:
{
"name": "Game of Thronnes 13",
"authorName": "Martin",
"pages": 222,
"genre": "Fantasia"
}
Response Body
{
"id": 1,
"name": "Game of Thronnes 13",
"authorName": "Martin",
"pages": 222,
"genre": "Fantasia"
}
PUT
http://localhost:8080/book/1
Request Body
{
"name": "Game of Thrones 2",
"authorName": "Martin",
"pages": 1213,
"genre": "Fantasia"
}
Response Body
{
"id": 1,
"name": "Game of Thrones 2",
"authorName": "Martin",
"pages": 1213,
"genre": "Fantasia"
}