Hasura 작업을 사용하여 Java REST API를 GraphQL로 변환

9144 단어 graphqlrestapi

본고는 일련의 문장의 일부분으로 이 시리즈는 유형 정의와 구성 단점을 통해 기존 RESTAPI를 GraphQL로 전환하는 방법을 소개한다.

소개


본고에서 Hasura 작업을 사용하여 Java RESTAPI를 GraphQL로 변환하는 방법을 배울 것입니다.
일반적으로 처음부터 GraphQL 서버를 작성하려면 GraphQL 모드를 설정하고 유형 정의를 작성하여 선택한 언어나 프레임워크의 해상도와 연결해야 합니다.이 서버 구성 요소의 난점은 RESTAPI를 작성하는 데 익숙한 사람들에게 해석 프로그램 코드는 매우 간단하고 GET/POST를 사용하여 각 유형의 인증 논리를 처리할 수 있다는 데 있다.응용 프로그램이 증가함에 따라 이것은 갈수록 복잡해진다.
Hasura는 데이터베이스(현재 Postgres)에 실시간 GraphQL CRUD를 제공함으로써 처음부터 GraphQL API를 설정하는 대부분의 복잡성을 줄였다. 이것은 대부분의 데이터 획득과 실시간 구독 용례를 포함해야 한다.
비즈니스 논리를 사용자 정의하는 경우 Hasura는 다음과 같은 방법으로 그래픽을 확장할 수 있습니다.

  • Remote Schemas: GraphQL 서버를 작성하는 데 만족하면 사용자 정의 GraphQL 서버를 원격 모드로 추가할 수 있습니다. Hasura가 자동으로 통합합니다.

  • Actions: 사용자 정의 논리를 위해 새로운 REST API를 작성하거나 기존의 REST API를 보존하고자 한다면 이 작업을 통해 완성할 수 있습니다. 이것은 우리가 본고에서 중점적으로 소개한 내용입니다.
  • 이 논문에서 우리는 조작 경로를 탐색하고 Hasura 조작을 사용하여 새로운 자바 REST API를 GraphQL로 변환하는 방법을 배울 것이다.

    새로운 REST API


    처음부터 시작하면 작업에 필요한 GraphQL 유형을 정의하고 간단한 Spring 부트 응용 프로그램을 만들어서 해상도 위치를 처리합니다.
    새로운 사용자를 등록하는 것을 예로 들자.

    새로운 Hasura 클라우드 프로젝트 만들기


    시작하기 전에 Hasura Cloud에 작업을 설정하는 항목을 만듭니다.아래의 Deploy to Hasura 단추를 누르면 무료로 등록하고 새 프로젝트를 만들 수 있습니다.

    Hasura는 Postgres 데이터베이스가 필요합니다.우리는 Heroku의 무료 Postgres 데이터베이스 층을 이용하여 이 프로그램을 시도할 수 있다.

    Heroku에 로그인하면 옵션Create project이 표시됩니다.

    프로젝트를 작성한 후 Launch the Console 페이지에서 새로 만든 프로젝트의 Projects 단추를 누르면 Hasura 컨트롤러에 들어갈 수 있습니다.새 프로젝트를 만들면 Postgres 데이터베이스에 있는 GraphQL 단점을 얻을 수 있습니다. 이 단점은 처음부터 전역적인 가용성, 안전성, 확장성을 가지고 있습니다.
    이제 Hasura 콘솔의 Actions 탭으로 이동하여 응용 프로그램에 GraphQL 유형을 정의합니다.

    동작 정의


    type Mutation {
      registerUser (
        name: String!
        email: String!
        password: String!
      ): UserOutput
    }
    
    

    유형 정의


    type UserOutput {
      id : uuid!
    }
    
    
    여기에서 우리는 돌연변이 유형registerUser을 정의합니다. 이것은 name, email, password 파라미터를 받아들여 사용자의 id 파라미터를 되돌려줍니다.
    나중에 프로세서 URL을 구성할 수 있습니다.Create를 클릭하여 동작을 만듭니다.
    이제 GraphiQL 탭에서 샘플 돌연변이를 시도하여 생성된 GraphQL 돌연변이를 검증합니다.
    mutation {
      registerUser(
        email: "[email protected]"
        name: "Person Name"
        password: "mypass"
      ) {
        id
      }
    }
    
    
    처리 프로그램 URL이 설정되지 않았기 때문에, 상술한 변이는 분명히 http 이상을 일으킬 것이다.그러나 이 테스트는 Hasura가 정의된 형식을 바탕으로 당신에게 돌연변이를 생성하는지 검증하기 위해 같은 GraphQL 단점에서 조회합니다.

    이제 Java 응용 프로그램을 계속 정의하고 변이를 시도해 보겠습니다.

    Codegen: 템플릿 코드 자동 생성


    이제 Codegen 탭으로 이동하여 Java 서버에 대한 템플릿 코드를 자동으로 생성합니다.우리는 처음부터 API를 생성하기 때문에 POST 프로세서뿐만 아니라 완전한 서버 설정이 필요하다.

    컨트롤러는 nodejsexpress, nodejszeit, nodejsazurefunction 등을 포함하지만 이에 국한되지 않는 다양한 프레임워크를 위한 코드를 생성할 수 있는 옵션을 제공합니다.
    이 예에서는 Java 프레임워크Spring Boot를 사용합니다.그러나 POST 노드에 서비스를 제공할 수 있는 모든 Java 서버는 이 예와 교환할 수 있습니다.

    필요한 비즈니스 논리:

  • 요청에 따라 작업 매개 변수 이름, 전자 메일 및 암호를 수신합니다.
  • 명문 암호 입력을 해시 보안 암호로 변환합니다.
  • 새로 만든 사용자를 산열 암호로 저장하는 변이를 Hasura에 보냅니다.
  • 생성된 사용자 객체를 반환하여 성공을 나타냅니다. 그렇지 않으면 오류가 반환됩니다.
  • Hasura 컨트롤러(registerUser.java와registerUserTypes.java)에서 생성된 코드gen은 파일 시스템에 복사되어 처리 프로그램을 변경할 수 있습니다.
    코드젠을 복사한 후 Spring 부트를 설정하고 서버를 실행할 수 있습니다.

    스프링 먼지 방지 커버 설치

  • 먼저 start.spring.io 를 사용하여 새 Spring Boot 프로젝트를 만듭니다.
  • 참고 이를 위해서는 IntelliJ IDEA, Spring 도구, Visual Studio 코드 또는 Eclipse 및 JDK(Java 개발 키트)와 같은 IDE를 설치해야 합니다.자세한 내용 here.

  • 복사된 코드젠을 demo.java 이라는 새 파일에 추가합니다.

  • 실행./mvnw spring-boot:run 명령을 통해 터미널에서 프로젝트를 구축하고 실행합니다.
    다음과 같은 출력이 표시됩니다.

    봐라!Spring Boot 프로젝트를 설정하고 시작했습니다.위의 명령은 http://localhost:8080/ 웹 서버 역할을 하는 Apache Tomcat을 시작합니다.그러나 HTTP 호출이 작동할 수 있도록 작업의 프로세서 URL을 업데이트해야 합니다.돌연변이를 처리하는 registerUser 노드를 추가합니다.따라서 최종 프로세서 URL은 http://localhost:8080/registerUser 과 유사합니다.
    우리는 Hasura 클라우드 실례가 자바 서버와 통신하기를 원하기 때문에 공공 URL에 자바 서버를 공개해야 한다.우리는 이 서버를 클라우드 실례에 위탁 관리하고 이 URL/IP를 가리킬 수 있다.그러나 이 강좌의 간결성을 위해 우리는 ngrok 을 사용할 것이다. 이것은 클라우드 실례와 통신하기 위해 로컬 서버를 공개하는 데 공공 URL을 제공한다.
    사용ngrok을 가정하면 터미널에서 실행ngrok http 8080하면 사용할 수 있는 유일한 URL이 제공됩니다.Hasura 콘솔에서 작성된 registerUser 작업의 수정 탭으로 돌아갑니다.프로세서 URL을 ngrok 생성된 URL로 업데이트합니다.
    마지막으로 GraphiQL을 통해 같은 돌연변이를 시도해 봅시다. 연결은 id에 가상 값을 되돌려 줄 수 있을 것입니다.

    그래백그라운드에서 Java REST API를 사용하여 분석 중인 GraphQL API가 있습니다.
    현재, 당신은 필요에 따라 처리 프로그램 코드를 수정하여 모든 업무 논리를 실행할 수 있습니다.서로 다른 API에 연결하거나, 데이터베이스에 연결하거나(Hasura의 API를 사용하는 것이 가장 좋음), 서로 다른 데이터베이스에 ORM을 사용하는 것과 같다. Hasura는 내부에서 GraphQL 변이를 오른쪽 REST API 프로세서로 에이전트하는 것을 책임진다.

    권한


    권한은요?누가 고객에게 이러한 GraphQL 돌연변이를 진행할 수 있습니까?이제 관리만 하도록 구성됩니다.우리는 다른 유형의 사용자가 이런 변이를 실행할 수 있도록 역할을 설정할 수 있다.

    위의 예에서 나는public라는 캐릭터를 만들었는데 이런 변이를 할 수 있다.전체 인증과 권한 수여가 Hasura와 어떻게 작동하는지에 대한 정보를 더 많이 얻으려면 문서를 보십시오.

    관계 데이터


    이제 Postgres 데이터베이스에 users 테이블이 있는지 생각해 봅시다.우리는registerUser에서 출력한 id를users표의 id에 연결할 수 있습니다.

    관련 데이터도 상응하는 표에 정의된 권한에 부합된다.(즉, 사용자)

    기존 REST API


    사용자 정의 업무 논리를 처리하는 일련의 단점이 포함된 자바 서버가 있다면 어떻게 해야 할지 생각할 수 있습니다.이런 상황에서 POST 단점이라면 필요한 GraphQL 유형을 정의하고 요청체를 처리하는 방식을 수정하여 작업할 수 있다.
    유효 로드를 요청하는 형식은 다음과 같습니다.
    {
      "action": {
        "name": "<action-name>"
      },
      "input": {
        "arg1": "<value>",
        "arg2": "<value>"
      },
      "session_variables": {
        "x-hasura-user-id": "<session-user-id>",
        "x-hasura-role": "<session-user-role>"
      }
    }
    
    
    따라서 우리의 예시에서 입력 매개 변수 - 이름, 전자 우편 및 비밀번호는 입력 대상에 포장됩니다.이 요청체를 처리하기 위해 기존 REST API를 수정할 수 있다면 GraphQL API는 예상대로 작동합니다.

    질의 작업


    위의 예에서는 GraphQL 돌연변이를 실행하는 방법을 보여 줍니다.같은 워크플로우는 백그라운드 프록시 Java REST API에서 GraphQL 질의를 실행하도록 확장할 수 있습니다.쿼리 작업의 전형적인 용례는 계산 필드, 데이터 풍부, 데이터 변환, 여러 데이터베이스와 API 원본에서 가져오기 등을 포함한다.

    지원되는 프레임워크


    RESTAPI는 JAX-RS, Restlet, Jersey, RESTEasy, Apache CFX 또는 서버 함수가 없는 모든 프레임워크에서 사용할 수 있습니다.결국 Hasura는 도달할 수 있는 POST 노드 하나만 있으면 이 노드에 조회를 전달할 수 있다.서버가 없는 함수에 API를 배치하려면 클라우드 제공 프로그램의 형식을 따라야 합니다.

    좋은 웹페이지 즐겨찾기