GraphQL-스키마

GraphQL 스키마는 GraphQL 서버 구현의 핵심입니다. 연결하는 클라이언트 응용 프로그램에서 사용할 수있는 기능을 설명합니다. 모든 프로그래밍 언어를 사용하여 GraphQL 스키마를 생성하고 그 주위에 인터페이스를 구축 할 수 있습니다.

GraphQL 런타임은 나타내는 데이터 서비스의 기능을 게시하기 위해 일반적인 그래프 기반 스키마를 정의합니다. 클라이언트 응용 프로그램은 기능 내에서 스키마를 쿼리 할 수 ​​있습니다. 이 접근 방식은 클라이언트를 서버에서 분리하고 독립적으로 발전하고 확장 할 수 있도록합니다.

이 장에서는 Apollo 서버를 사용하여 GraphQL 쿼리를 실행합니다. 그만큼makeExecutableSchema graphql-tools의 함수는 스키마와 리졸버를 바인딩하는 데 도움이됩니다.

makeExecutableSchema 함수 구문

그만큼 makeExecutableSchema함수는 개체 유형의 단일 인수 {}를 사용합니다. 이 함수를 사용하는 구문은 다음과 같습니다.

import { makeExecutableSchema } from 'graphql-tools';

const jsSchema = makeExecutableSchema({
   typeDefs,
   resolvers, // optional
   logger, // optional
   allowUndefinedInResolve = false, // optional
   resolverValidationOptions = {}, // optional
   directiveResolvers = null, // optional
   schemaDirectives = null,  // optional
   parseOptions = {},  // optional
   inheritResolversFromInterfaces = false  // optional
});

Sr. 아니. 매개 변수 및 설명
1

typeDefs

이것은 필수 인수입니다. GraphQL 쿼리를 UTF-8 문자열로 나타냅니다.

2

Resolvers

이것은 선택적 인수입니다 (기본적으로 빈 개체). 여기에는 쿼리를 처리하는 기능이 있습니다.

logger

이것은 선택적 인수이며 서버 콘솔에 오류를 인쇄하는 데 사용할 수 있습니다.

4

parseOptions

이것은 선택적 인수이며 typeDefs를 문자열로 지정할 때 구문 분석을 사용자 정의 할 수 있습니다.

5

allowUndefinedInResolve

이것은 기본적으로 true입니다. false로 설정하면 해석 함수가 undefined를 반환하는 경우 오류가 발생합니다.

6

resolverValidationOptions

선택적 인수이며 부울 속성이있는 개체를받습니다.

7

inheritResolversFromInterfaces

이것은 선택적 인수이며 리졸버 개체 상속을 확인하기 위해 부울 인수를받습니다.

삽화

이 스키마를 이해하는 간단한 애플리케이션을 만들어 보겠습니다. 이렇게하면 서버에서 학생 목록을 쿼리하기위한 스키마가 생성됩니다. 학생 데이터는 플랫 파일에 저장되고 다음과 같은 노드 모듈을 사용합니다.notarealdb 데이터베이스를 위조하고 플랫 파일에서 읽습니다.

1 단계-프로젝트에 필요한 종속성 다운로드 및 설치

다음과 같은 폴더를 만듭니다. schema-app. 터미널에서 디렉토리를 schema-app으로 변경하십시오. 그런 다음 환경 설정 장에 설명 된 3 ~ 5 단계에 따라 다운로드 및 설치 프로세스를 완료합니다.

2 단계-스키마 생성

더하다 schema.graphql 프로젝트 폴더의 파일, schema-app 다음 코드를 추가하십시오-

type Query {
   greeting:String
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

스키마의 루트는 쿼리 유형입니다. 쿼리에는 각각 String과 학생 목록을 반환하는 greeting과 Students라는 두 개의 필드가 있습니다. Student는 여러 필드를 포함하므로 Object 유형으로 선언됩니다. ID 필드는 nullable이 아닌 것으로 선언됩니다.

3 단계-Resolver 생성

파일 생성 resolvers.js 프로젝트 폴더에 다음 코드를 추가하십시오-

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

여기서 인사와 학생은 쿼리를 처리하는 해결 자입니다. students resolver function데이터 액세스 레이어에서 학생 목록을 반환합니다. 모듈 외부에서 해석기 기능에 액세스하려면 Query 객체를 다음을 사용하여 내 보내야합니다.module.exports.

4 단계-애플리케이션 실행

server.js 파일을 만들고 환경 설정 장의 8 단계를 참조하십시오. 다음 단계는 터미널에서 npm start 명령을 실행하는 것입니다. 서버는 9000 포트에서 실행됩니다. 여기서는 GraphiQL을 클라이언트로 사용하여 애플리케이션을 테스트합니다. 브라우저를 열고 URL을 입력하십시오.http://localhost:9000/graphiql.

편집기에 다음 쿼리를 입력하십시오-

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

쿼리는 아래와 같이 출력을 표시합니다.

Note− students.json을 RESTful API 호출로 대체하여 학생 데이터 또는 MySQL 또는 MongoDB와 같은 실제 데이터베이스를 검색 할 수 있습니다. GraphQL은 성능을 향상시키기 위해 원래 애플리케이션 계층을 둘러싼 얇은 래퍼가됩니다.