SpringBoot HATEOAS 사용법 안내(입문)

5537 단어 SpringBootHATEOAS
REST 스타일 소개
HATEOAS 를 소개 하기 전에 REST 를 간단히 소개 하고,REST 는 Representational state transfer 의 줄 임 말로,표현 적 상태 전환 을 뜻 하 는 것 으로 번역 됐다.REST 는 구조 적 인 스타일 이다.
Richardson Maturity Model
Richardson 은 REST 의 성숙 도 모델 을 제 시 했 는데 우 리 는 Richardson Maturity 모델 이 라 고 부른다.이런 모델 은 REST 를 성숙 도 에 따라 4 개의 등급 으로 나눈다.
  • Level 0:HTTP 를 WEB 서비스 로 전송 하 는 방식 으로 REST 스타일 로 SOAP 웹 서 비 스 를 공개 합 니 다
  • Level 1:적당 한 URI(명사 사용)를 사용 하여 자원 을 공개 하 는 방식 으로 자원 의 개념
  • 을 제시 했다.
  • Level 2:자원 은 정확 한 URI+HTTP 방법 을 사용 합 니 다.예 를 들 어 사용 자 를 업데이트 하면 put 방식 으로 조회 용 get 방식
  • Level 3:HATEOAS(응용 프로그램 상태 엔진 의 하이퍼미디어)를 사용 하여 자원 의 표현 에 링크 정 보 를 포함 하고 클 라 이언 트 는 링크 정보 에서 실행 가능 한 동작 을 발견 할 수 있다
  • HATEOAS 가 뭐 예요?
    HATEOAS 대표"초매 체 는 앱 상태의 엔진"
    앞에서 알 수 있 듯 이 HATEOAS 제약 을 사용 하 는 것 은 REST 스타일 에서 성숙 도가 가장 높 고 공식 적 으로 추천 하 는 방식 이다.HATEOAS 의 프로젝트 를 사용 하지 않 았 고 서버 와 클 라 이언 트 가 결합 되 었 다.클 라 이언 트 는 관련 문 서 를 통 해 서버 가 어떤 수정 을 했 는 지 알 수 있 을 뿐이다.HATEOAS 가 제약 하 는 REST 서 비 스 를 사용 하고 서버 가 인터페이스 정 보 를 수정 한 후에클 라 이언 트 는 서버 가 제공 하 는 자원 의 표현 을 통 해 실행 할 수 있 는 조작 을 스마트 하 게 발견 할 수 있 습 니 다.클 라 이언 트 는 수정 할 필요 가 없습니다.자원 정 보 는 동적 으로 변 하기 때 문 입 니 다.
    Spring 홈 페이지 에 이 프로젝트 에 대한 문서 가 있 습 니 다.링크:https://spring.io/projects/spring-hateoas
    SpringBoot HATEOAS
    SpringBoot 에 도 통합 HATEOAS 가 있 습 니 다.본 블 로 그 는 어떻게 사용 하 는 지 소개 합 니 다.
    도구 준비:
  • JDK8.0
  • Maven 3.0+구축 도구
  • Eclipse 또는 IntelliJ IDEA
  • git&gitlab
  • Maven 관련 설정
    pom.xml 에 hateoas 설정 추가
    
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    웹 간단 한 curd 예 를 써 야 하기 때문에 다른 필요 한 것 도 추가 합 니 다.
    
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jpa</artifactId>
     </dependency>
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-hateoas</artifactId>
     </dependency>
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.0.25</version>
     </dependency>
     <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.40</version>
     </dependency>
    
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
     <exclusions>
     <exclusion>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
     </exclusion>
     </exclusions>
     </dependency>
    실체 클래스 리 소스 지원 실현
    Model 클래스 는 hateoas 가 제공 하 는 Resource Suppor 를 실현 합 니 다.
    
    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import org.springframework.hateoas.ResourceSupport;
    
    import javax.persistence.*;
    import java.io.Serializable;
    @Entity
    @Table(name="sys_user")
    public class SysUserInfo extends ResourceSupport implements Serializable{
    
     @Id
     @GeneratedValue
     private Long userId;
     @Column(unique=true,length=20,nullable=false)
     private String username;
     @Column(length=2,nullable=true)
     private String sex;
     @Column(length=10,nullable=true)
     private String password;
    
     public SysUserInfo(){
    
     }
    
     @JsonCreator
     public SysUserInfo(@JsonProperty("userId")Long userId,@JsonProperty("username")String username,
          @JsonProperty("sex")String sex,@JsonProperty("password")String password){
      this.userId = userId;
      this.username = username;
      this.sex = sex;
      this.password = password;
     }
    }
    ....
    인터페이스 호출,HATEOAS 모드 기반
    
    @GetMapping("/findBySysUserId/{userId}")
     public SysUserInfo findBySysUserId(@PathVariable("userId") long userId) {
      if (LOG.isInfoEnabled()) {
       LOG.info("    userId : {}" , userId);
      }
      Optional<SysUserInfo> sysUserInfo = Optional.ofNullable(sysUserRepository.findByUserId(userId));
      if (!sysUserInfo.isPresent()) {
       throw new NotFoundException("        ! userId:"+userId);
      }
      //Resource<SysUserInfo> resource = new Resource<SysUserInfo>(sysUserInfo.get());
      ControllerLinkBuilder linkBuilder = linkTo(methodOn(this.getClass()).findBySysUserId(userId));
      sysUserInfo.get().add(linkBuilder.withRel("findBySysUserId"));
      return sysUserInfo.get();
     }

    인 스 턴 스 코드:github 링크 다운로드
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기