Git Product home page Git Product logo

julianazanelatto / rdswithapirest Goto Github PK

View Code? Open in Web Editor NEW
44.0 2.0 37.0 77 KB

Project for creating a REST API with Java. An API is said to be Restful if it follows the REST standard, or Richardson's maturity model. For this, we use modules such as spring web, spring-jpa and spring Hateoas in this basic API.

Java 100.00%
spring-boot spring java rest-api jpa-hibernate jpa spring-web spring-hateoas

rdswithapirest's Introduction

# rdswithapirest

Descrição
----------

Esse projeto está associado ao curso da DIO - Digital Innovation One - utilizando Java para criar uma API rest. Uma API é dita Restful se ela segue o padrão REST, 
ou então, o modelo de maturidade de Richardson. Para isso, utilizamos nesta API básica módulos como: spring web e spring Hateoas.
O spring-web, é um módulo do framework spring, fornece uma séries de métodos e classes com estrutura rest para simplificar a criação de uma API. Enquanto isso,
o spring-hateoas possibilita a implementação do último nível de maturidade de Richardson. Dessa forma, poderemos aplicar links aos recurso e consequentemente, 
fornecemos um guia para navegabilidade do usuário dentro da API.

Neste projeto foi utilizado a versão 17 do Java.

Página para criar seu projeto spring-boot: https://start.spring.io/

Conteúdo
--------

MyFirstApi
-> Person
->PersonController
->PersonRepository

ApiRest
->Employee
->EmployeeController
->EmployeeRepository
->LoadBD
->EmployeeNotFoundException
->EmployeeNotFoundAdvice

Hateoas
->Controllers
->Repositories
->Exceptoins
->Entyties
->Swagger
->LoadBDHateoas


Cronograma do curso DIO
------------------------

Criando uma API REST Conectada ao Amazon RDS com Java

AULA 1. Introdução
ETAPA 1 - Banco de dados relacionais
ETAPA 2 - Relembrando principais conceitos de BD
ETAPA 3 - O que é computação em nuvem (Cloud Computing)?
ETAPA 4 - AWS - Visão geral

AULA 2. AWS RDS
ETAPA 1 - RDS e Aurora
ETAPA 2 - Instanciando um BD na AWS RDS
ETAPA 2.1 - Explorando a instância na RDS
ETAPA 3 - Conectando a RDS com @configuration.properties
https://docs.spring.io/spring-boot/docs/1.3.0.M2/reference/html/boot-features-sql.html

AULA 3. Criando projeto básico com Spring Boot      (Spring Web (API REST) ou Spring WebFlux (API REST Reativa) )
ETAPA 1 - O que é Spring, Spring Boot e Spring Initializr?
ETAPA 2 - Entendendo as dependências
ETAPA 3 - API com Spring boot (parte 1)
ETAPA 4 - API com Spring boot (parte 2)
ETAPA 5 - API com Spring boot (parte 3)
ETAPA 6 - API com Spring boot (parte 4)

https://spring.io/guides/gs/accessing-data-rest/


AULA 4. API REST COM CRUD
ETAPA 1 - REST API E CRUD
ETAPA 2 - Abstração e modelagem de domínio
          utilizando UML


AULA 5. CONSTRUINDO API REST COM RDS AWS - https://spring.io/guides/tutorials/rest/
ETAPA 1 - Criando API parte 1 
	  Criando Employee Entity, Controller, Repository e classes de exceção: NotFoundException
ETAPA 2 - Criando API parte 2
	  Revisando o que foi feito
	  Criando as requisições com métodos HTTP no Employeecontroller e persistindo dados

AULA 6 - API REST com HATEOAS
ETAPA 1 - O que é o spring-hateoas?
ETAPA 2 - Parte 1 - Criando entidade order e classes relacionadas.
		     Inserindo links aos recursos
		     Testando com postman e curl
ETAPA 3 - Parte 2 -  Criando os métodos put para uma determinada orde (cancel e complete)
		     Testando com postman e curl


rdswithapirest's People

Contributors

julianazanelatto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

rdswithapirest's Issues

Inclusão Anotação @PathVariable - Classe EmployeeControllerHateoas.java

Olá Juliana,

Ao tentar realizar teste no postman com o método PUT implementado na Classe EmployeeControllerHateoas.java
Estava ocorrendo erro me indicando que o ID que estava recebendo era NULL.
Então coloquei anotação @PathVariable no parâmetro ID do método replaceEmployee dessa forma.

@PutMapping("/employees/update/{id}")
    EmployeeHateoas replaceEmployee(@RequestBody EmployeeHateoas newEmployee, @PathVariable Long id){
        return repository.findById(id).map(employee -> {
            employee.setName(newEmployee.getName());
            employee.setAddress(newEmployee.getAddress());
            employee.setRole(newEmployee.getRole());
            return repository.save(newEmployee);
        }).orElseGet(() -> {
            newEmployee.setId(id);
            return repository.save(newEmployee);
        });

Dessa forma é realizada o update no banco com os dados passados no body da requisição.

Espero que agregue valor para a comunidade.

Parabéns pelo curso.

Algumas Observações sobre o Projeto.

Olá tudo bem , eu fiz o Bootcamp DIO Pan e fiz o modulo do RDS com HATEOAS , conclui o projeto e gostei muito das aulas porém quero pontuar alguns pontos, a primeira observação foi no LoadDBHateoas.java
No codigo feito em aula nos videos vc colocou a anotação @Autowired quando estava mostrando o loadOrder, na verdade a anotação e @bean por isso não funcionou no video, onde vc acbou juntando os dois num mesmo metodo. Eu fiz dessa forma abaixo e funcionou muito bem.

@Configuration
public class LoadDBHateoas {

    private static final Logger log = LoggerFactory.getLogger(LoadDBHateoas.class);

    @Bean
    CommandLineRunner loadEmployees(EmployeeRepositoryHateoas employeeRepositoryHateoas){
        return args -> {
            log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Claudio","ADMIN","Rua jupi 215")));
            log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Clovis","USERS","Avenida Joao Dias, 3000")));
        };
    }

    @Bean
    CommandLineRunner loadOrder(OrderRepositoryHateoas orderRepository){
        return args -> {
            orderRepository.save(new OrderHateoas(Status.COMPLETED, "Completo"));
            orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
            orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
            orderRepository.findAll().forEach(order -> {
                log.info("Preloaded" + order);
            });
        };
    }
}

Outro ponto foi nos controllers de Order e Employee

no seu codigo vc cria uma Exception para Employee e Order, porém ao fazer validações via postman com get quando dava que não foi encontrado o postman não exibia nenhuma mensagem personalizada. somente quando se fazia uma alteração via PUT com id invalido, verifiquei que no seu codigo vc não colocou o orElseThrow apontado para a Exception personalizada nos GetMappings vc apenas chamou o status httpStatus.NOT_FOUND , além disso o Optional não seria necessário usando com orElseThrow, evitando o if e reduzindo codigo. Na minha implementação fiz dessa forma.

@GetMapping("/employee/{id}")
    public ResponseEntity<EmployeeHateoas> consultByID(@PathVariable Long id){
        EmployeeHateoas employee = repositoryEmployee.findById(id).orElseThrow(() -> new EmployeeNotFoundExceptionHateoas(id));
            employee.add(linkTo(methodOn(EmployeeControllerHateoas.class).listOfEmployeeAll()).withRel("All employees"));
            return new ResponseEntity<>(employee, HttpStatus.OK);
    }

funciona bem e exibe a mensagem de erro de employee not found. o mesmo feito com order.

@GetMapping("orders/{id}")
   ResponseEntity<OrderHateoas> consultOneOrder(@PathVariable Long id){
       OrderHateoas order = repositoryOrder.findById(id).orElseThrow(()-> new OrderNotFoundExceptionHateoas(id));
       order.add(linkTo(methodOn(OrderControllerHateoas.class).consultOrderAll()).withRel("All orders"));
       return new ResponseEntity<>(order,HttpStatus.OK);
   }

Espero ter contribuido de alguma forma. Abraços.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.