GraphQL - Giản đồ

Một lược đồ GraphQL là cốt lõi của bất kỳ triển khai máy chủ GraphQL nào. Nó mô tả chức năng có sẵn cho các ứng dụng khách kết nối với nó. Chúng ta có thể sử dụng bất kỳ ngôn ngữ lập trình nào để tạo lược đồ GraphQL và xây dựng giao diện xung quanh nó.

Thời gian chạy GraphQL xác định một lược đồ dựa trên đồ thị chung để xuất bản các khả năng của dịch vụ dữ liệu mà nó đại diện. Các ứng dụng khách có thể truy vấn lược đồ trong khả năng của nó. Cách tiếp cận này tách khách hàng khỏi máy chủ và cho phép cả hai phát triển và mở rộng quy mô độc lập.

Trong chương này, chúng tôi sử dụng máy chủ Apollo để thực hiện các truy vấn GraphQL. CácmakeExecutableSchema hàm trong graphql-tools giúp bạn liên kết lược đồ và trình phân giải.

Cú pháp hàm makeExecutableSchema

Các makeExecutableSchemahàm nhận một đối số duy nhất {} của kiểu Đối tượng. Cú pháp để sử dụng hàm này được đưa ra dưới đây:

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.No. Mô tả về Thông Số
1

typeDefs

Đây là một đối số bắt buộc. Nó đại diện cho một truy vấn GraphQL dưới dạng một chuỗi UTF-8.

2

Resolvers

Đây là một đối số tùy chọn (đối tượng trống theo mặc định). Điều này có các chức năng xử lý truy vấn.

3

logger

Đây là một đối số tùy chọn và có thể được sử dụng để in lỗi ra bảng điều khiển máy chủ.

4

parseOptions

Đây là một đối số tùy chọn và cho phép tùy chỉnh phân tích cú pháp khi chỉ định typeDefs dưới dạng một chuỗi.

5

allowUndefinedInResolve

Điều này đúng theo mặc định. Khi được đặt thành false, các hàm giải quyết của bạn sẽ tạo ra lỗi nếu chúng trả về không xác định.

6

resolverValidationOptions

Đây là một đối số tùy chọn và chấp nhận một đối tượng có thuộc tính Boolean.

7

inheritResolversFromInterfaces

Đây là một đối số tùy chọn và chấp nhận một đối số Boolean để kiểm tra tính kế thừa của đối tượng giải quyết.

Hình minh họa

Hãy để chúng tôi tạo một ứng dụng đơn giản để hiểu lược đồ này. Thao tác này sẽ tạo một lược đồ để truy vấn danh sách sinh viên từ máy chủ. Dữ liệu sinh viên sẽ được lưu trữ trong một tệp phẳng và chúng tôi sẽ sử dụng một mô-đun nút được gọi lànotarealdb để giả mạo cơ sở dữ liệu và đọc từ tệp phẳng.

Bước 1 - Tải xuống và cài đặt các phụ thuộc bắt buộc cho dự án

Tạo một thư mục có tên schema-app. Thay đổi thư mục của bạn thành ứng dụng lược đồ từ thiết bị đầu cuối. Sau đó, làm theo các bước từ 3 đến 5 được giải thích trong chương Thiết lập Môi trường để hoàn tất quá trình tải xuống và cài đặt.

Bước 2 - Tạo một lược đồ

Thêm vào schema.graphql tệp trong thư mục dự án, schema-app và thêm mã sau:

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

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

Gốc của lược đồ sẽ là kiểu Truy vấn. Truy vấn có hai trường - lời chào và Sinh viên trả về Chuỗi và danh sách sinh viên tương ứng. Sinh viên được khai báo là một kiểu Đối tượng vì nó chứa nhiều trường. Trường ID được khai báo là không thể null.

Bước 3 - Tạo trình phân giải

Tạo một tệp resolvers.js trong thư mục dự án và thêm mã sau:

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

module.exports = {Query}

Ở đây lời chào và học sinh là người giải quyết xử lý truy vấn. students resolver functiontrả về danh sách sinh viên từ lớp truy cập dữ liệu. Để truy cập các chức năng của trình phân giải bên ngoài mô-đun, đối tượng Truy vấn phải được xuất bằng cách sử dụngmodule.exports.

Bước 4 - Chạy ứng dụng

Tạo tệp server.js và tham khảo bước 8 trong Chương Thiết lập Môi trường. Bước tiếp theo là thực hiện lệnh npm start trong terminal. Máy chủ sẽ hoạt động trên cổng 9000. Ở đây, chúng tôi sử dụng GraphiQL làm máy khách để kiểm tra ứng dụng. Mở trình duyệt và nhập URL,http://localhost:9000/graphiql.

Nhập truy vấn sau vào trình soạn thảo -

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

Truy vấn sẽ hiển thị đầu ra như hình dưới đây -

Note- Chúng tôi có thể thay thế sinh viên.json bằng lệnh gọi API RESTful để truy xuất dữ liệu sinh viên hoặc thậm chí là cơ sở dữ liệu thực như MySQL hoặc MongoDB. GraphQL trở thành một lớp bao bọc mỏng xung quanh lớp ứng dụng gốc của bạn để cải thiện hiệu suất.