Hypermedias com Spring HATEOAS
5333 단어 springboothateoasrestjava
O que é HATEOAS ?
HATEOAS ou(Hypertext as the Engine of Application State) é um modelo que permite que você navegue entre seus endpoints de forma dinâmica através de link e URLs e sem precisar do conhecimento prévio sobre a API. Nesse caso o cliente descobrirá as URLs conforme navega entre seus recursos.
Uma boa forma de comparação de HATEOAS é o Hypertext ou Hipertexto que é comum para quem navega na internet diariamente. Quando estamos pesquisando por algo na Internet ou Lendo alguma notícia e nos deparamos com alguma informação que nos direciona para outro link.
O mesmo conceito pode ser aplicado a API em que a aplicação consumidora um link inicial e a partir dele terá acesso a outros recursos caso necessário.
Spring-HATEOAS é uma biblioteca de APIs que podemos usar para criar representações REST que seguem o padrão HATEOAS.
Vamos construir uma aplicação simples com o objetivo de mostrar as vantagens de usar o HATEOAS
Spring-HATEOAS é uma biblioteca de APIs que podemos usar para criar representações REST que seguem o padrão HATEOAS.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
@Entity
public class Employee {
private @Id @GeneratedValue Long id;
private String name;
private String role;
public Employee() {}
public Employee(String name, String role) {
this.name = name;
this.role = role;
}
//gets and sets
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel;
import org.springframework.http.ResponseEntity;
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.RestController;
import com.example.demo.exception.EmployeeNotFoundException;
import com.example.demo.model.Employee;
import com.example.demo.repository.EmployeeRepository;
@RestController
public class EmployeeController {
@Autowired
private EmployeeRepository repository;
@GetMapping("/employees")
public ResponseEntity<CollectionModel<EntityModel<Employee>>> all() {
List<EntityModel<Employee>> employees = repository.findAll().stream()
.map(employee -> EntityModel.of(employee,
linkTo(methodOn(EmployeeController.class).one(employee.getId())).withSelfRel()))
.collect(Collectors.toList());
return ResponseEntity.ok(CollectionModel.of(employees));
}
@GetMapping("/employees/{id}")
public ResponseEntity<EntityModel<Employee>> one(@PathVariable Long id) {
Employee employee = repository.findById(id)
.orElseThrow(() -> new EmployeeNotFoundException(id));
return ResponseEntity.of(Optional.of(EntityModel.of(employee,
linkTo(methodOn(EmployeeController.class).all()).withRel("employees"))));
}
}
O methodOn() obtém o mapeamento do método fazendo uma invocação fictícia do método de destino.
LinkTo() 클래스를 검사하는 방법은 마지막으로 제어할 수 있는 클래스를 지도에 추가하는 것입니다.
Nesse는 CollectionModel ele auxilia na criação de um wrapper para uma coleção de entidades에서 사용 사례를 보여줍니다.
No final temos o seguinte resultado
Se listarmos todos os Employees, ele vai retornar no json um link para acessar cada Employee individualmente, caso seja necessário.
Se fizemos uma busca por apenas um employee ele nos retorna no json um link para acessar todos os 직원
Esse é um exemplo simples onde vemos que o cliente pode ter um único ponto de entrada para a aplicação e outras ações podem ser tomadas com base na resposta.
Nessa aplicação eu mostrei como Spring HATEOAS는 API em um serviço rest의 descoberta de comoberta를 홍보합니다.
link do repositório com o código fonteprojeto-exemplo
Reference
이 문제에 관하여(Hypermedias com Spring HATEOAS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/daienelima/hypermedias-com-spring-heteoas-554k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)