En este contenido nos enseña crear un API REST con la tecnologia backend sería con spring boot y base de datos MySQL. Por lo tanto nos ayudará aprender de Clean Architecture y código limpio de Java.
Controlador
Vamos a crear un controlador para API donde consume los servicios
package com.tutofox.springboot.backend.apirest.controllers; import java.util.Date; import java.util.List; import org.springframework.http.HttpStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import com.tutofox.springboot.backend.apirest.models.entity.Cliente; import com.tutofox.springboot.backend.apirest.models.services.ClienteService; @CrossOrigin(origins = { "http://localhost:4200" }) @RestController @RequestMapping("/api") public class ClienteRestController { @Autowired private ClienteService clienteService; @GetMapping("/clientes") public List<Cliente> index() { return clienteService.findAll(); } @GetMapping("/clientes/{id}") public Cliente show(@PathVariable Long id) { return this.clienteService.findById(id); } @PostMapping("/clientes") @ResponseStatus(HttpStatus.CREATED) public Cliente create(@RequestBody Cliente cliente) { cliente.setCreateAt(new Date()); this.clienteService.save(cliente); return cliente; } @PutMapping("/clientes/{id}") @ResponseStatus(HttpStatus.CREATED) public Cliente update(@RequestBody Cliente cliente, @PathVariable Long id) { Cliente currentCliente = this.clienteService.findById(id); currentCliente.setNombre(cliente.getNombre()); currentCliente.setApellido(cliente.getApellido()); currentCliente.setEmail(cliente.getEmail()); this.clienteService.save(currentCliente); return currentCliente; } @DeleteMapping("/clientes/{id}") @ResponseStatus(HttpStatus.NO_CONTENT) public void delete(@PathVariable Long id) { Cliente currentCliente = this.clienteService.findById(id); this.clienteService.delete(currentCliente); } }
Modelo / Entity
package com.tutofox.springboot.backend.apirest.models.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="clientes") public class Cliente implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String nombre; private String apellido; private String email; @Column(name="create_at") @Temporal(TemporalType.DATE) private Date createAt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellido() { return apellido; } public void setApellido(String apellido) { this.apellido = apellido; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getCreateAt() { return createAt; } public void setCreateAt(Date createAt) { this.createAt = createAt; } private static final long serialVersionUID = 1L; }
Servicios
package com.tutofox.springboot.backend.apirest.models.services; import java.util.List; import com.tutofox.springboot.backend.apirest.models.entity.Cliente; public interface ClienteService { public List<Cliente> findAll(); public void save(Cliente cliente); public Cliente findById(Long id); public void delete(Cliente cliente); }
package com.tutofox.springboot.backend.apirest.models.services; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.tutofox.springboot.backend.apirest.models.dao.ClienteDao; import com.tutofox.springboot.backend.apirest.models.entity.Cliente; @Service public class ClienteServiceImpl implements ClienteService{ @Autowired private ClienteDao clienteDao; @Override @Transactional(readOnly = true) public List<Cliente> findAll() { return (List<Cliente>) clienteDao.findAll(); } @Override @Transactional public void save(Cliente cliente) { clienteDao.save(cliente); } @Override @Transactional(readOnly = true) public Cliente findById(Long id) { return clienteDao.findById(id).orElse(null); } @Override @Transactional public void delete(Cliente cliente) { clienteDao.delete(cliente); } }
Dao
package com.tutofox.springboot.backend.apirest.models.dao; import org.springframework.data.repository.CrudRepository; import com.tutofox.springboot.backend.apirest.models.entity.Cliente; public interface ClienteDao extends CrudRepository<Cliente, Long>{ }