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은 성능을 향상시키기 위해 원래 애플리케이션 계층을 둘러싼 얇은 래퍼가됩니다.