Spring Boot를 사용하는 GraphQL(코드 우선 접근 방식)

소개



이 기사에서는 SPQR 라이브러리를 사용하여 코드 우선 접근 방식으로 GraphQL API를 구현하는 방법을 배웁니다.

역사



REST 메서드에서 under-fetching 및 over-fetching과 같은 문제는 GraphQL에서 해결됩니다. GraphQL은 소비자가 원하든 원하지 않든 모든 속성을 갖도록 강요하는 대신 원하는 속성에 대한 자유를 소비자에게 제공합니다. 역사적으로 GraphQL은 스키마 우선 접근 방식으로 시작했습니다.

스키마 우선 접근 방식을 사용하면 GraphQL 스키마를 유지하기가 매우 어려웠고 GraphQL API를 스키마와 동기화 상태로 유지하기가 매우 어려워졌습니다.

기술이 발전하고 오픈 소스 이니셔티브가 됨에 따라 오픈 소스 커뮤니티는 API 구축 및 개발이 매우 쉽고 유지 관리도 쉬운 코드 우선 접근 방식을 제시합니다.

도구)/프레임워크):



편집기 — IntelliJ Idea/Eclipse
언어 — Java 8 이상
프레임워크 — 스프링 부트
통신 매체 — GraphQL
이미지 빌드 도구 — Docker
오케스트레이션 — Kubernetes(k8)

GIT 레포 -



spring-boot/hello-graphql-service at main · shethaptech/spring-boot

메이븐 종속성




메이븐 종속성

구성



application.yml에서 아래 설정을 참고해주세요.

graphql.spqr.gui.enabled — true/false — GraphQL이 데이터를 쿼리/변경할 수 있도록 합니다.
graphql.spqr.gui.pageTitle — GraphQL UI의 페이지 제목
graphql.spqr.gui.target-endpoint — REST API를 통해 액세스
graphql.spqr.gui.endpoint — GraphQL UI에 액세스
graphql.spqr.base-packages — 주석으로 리졸버 스캔

graphql:
  spqr:
    gui:
      enabled: true   
pageTitle: Hello World  
target-endpoint: /graphql  
endpoint: /playground  
base-packages: com.shethap.tech.graphql


모델



이제 간단한 "사용자"POJO를 정의하고 검색/저장/삭제/업데이트 작업을 위한 GraphQL 코드 우선 접근 방식을 사용하여 CRUD 작업을 구현할 것입니다.



@Builder

public class User {

private String name;

private Integer id;

private Date registrationDate;

}



구현



여기, 이 섹션에서는 GrapQL 스키마 작성을 피하는 데 도움이 되는 몇 가지 중요한 주석을 이해하려고 노력할 것입니다.

@GraphQLAPI — 이 주석은 GraphQL 리졸버에 사용됩니다. @Component/@Service와 함께 사용할 수 있습니다.

For Ex:

@GraphQLApi

@Component

public class UserAPI



@GraphQLQuery — 이 주석은 GraphQL 쿼리를 정의하는 데 사용됩니다. 일반적으로 데이터 조회에 사용되는 REST @GetMappping(HTTP GET 방식)과 거의 동일하다.

For Ex:

@GraphQLQuery(name = "getUsers", description = "to get all the users")

public List getUsers() {

return userService.getUsers();

}



@GraphQLMutation — 이 주석은 GraphQL 돌연변이를 정의하는 데 사용됩니다. REST PUT/POST/PATCH 작업과 유사하며 데이터를 저장, 업데이트 또는 삭제하는 데 사용됩니다.

For Ex:

@GraphQLMutation(name = "saveUser", description = "to save user")

public User saveUsers(@GraphQLArgument(name = "user") User user) {

return userService.saveUser(user);

}



@GraphQLArgument — 이 주석은 GraphQL API에 입력을 제공하는 데 사용됩니다. 입력을 받는 데 사용되는 @RequestParam 또는 @RequestPath와 유사합니다.

For Ex:

public User saveUsers(@GraphQLArgument(name = "user") User user)



테스트



git repo에서 프로젝트를 가져오고 elicpse/IntelliJ 작업 공간을 설정하고 애플리케이션을 실행하십시오.

애플리케이션이 실행되면 graphql.spqr.gui.endpoint 속성을 사용하여 구성한 URL(이 경우 "/playground")을 누르십시오.

따라서 로컬 설정에서 아래 URL을 누르고 GraphQL UI가 실행 중인지 확인할 수 있으며 쿼리/변형을 확인할 수 있습니다.


GraphQL UI

주요 테이크 아웃



→ 코드 우선 접근 방식은 개발을 고정시킵니다.

→ 스키마가 자동으로 생성되므로 스키마 유지 관리가 필요하지 않습니다.

→ 주석으로 구동되므로 코드 줄이 줄어듭니다.

→ API를 테스트하고 모의하기 쉽습니다.

→ 스키마 우선 접근 방식에 필요한 GraphQL 리졸버 및 데이터 가져오기에 별도의 구현이 필요하지 않습니다.

좋은 웹페이지 즐겨찾기