İndiyədək sxemi təsvir edir və sorğular yazırdıq, amma onları icra etməyə yer yox idi: həqiqi server lazımdır. Restoranı təsəvvür edin. Sxem — menyudur: nə sifariş etmək olar. Resolver-lər — aşpazlardır, hər biri öz yeməyini hazırlamağı bacarır. Apollo Server isə baş ofisiantdır: sifarişi (sorğunu) qəbul edir, menyu ilə tutuşdurur, aşpazlara tapşırıq paylayır və hazır yeməkləri müştəriyə gətirir. Bu dərsdə belə «ofisiantı» Node.js-də işə salacaq, ona blog sxemini qoşacaq və Apollo Sandbox-u — sorğular üçün brauzer «sınaq meydançasını» açacaqsınız.
Nələr lazımdır
Apollo Server — Node.js üçün ən populyar GraphQL serveridir; 5-ci versiya və Node.js 20+ lazımdır. @apollo/server paketi serverin özüdür, graphql isə sorğuları təhlil edən və icra edən «mühərrikdir» (GraphQL.js). Apollo Server 5 graphql 16 ilə işləyir, npm isə susmaya görə 17-ni quraşdırıb ERESOLVE xətası ilə dayanardı, ona görə versiyanı açıq yazırıq: graphql@16. TypeScript üçün typescript, tsx (.ts faylları ayrıca yığım olmadan işə salır) və @types/node əlavə edək:
mkdir blog-api && cd blog-api
npm init --yes && npm pkg set type="module"
npm install @apollo/server graphql@16
npm install -D typescript tsx @types/nodenpm pkg set type="module" əmri ES modulları aktiv edir: faylda import və yuxarı səviyyədə await yazmaq olar. package.json-a "dev": "tsx watch src/index.ts" (hər yadda saxlamada yenidən başlatma) və "typecheck": "tsc --noEmit" skriptlərini əlavə edin. tsconfig.json-da strict, module: "nodenext", verbatimModuleSyntax, habelə allowImportingTsExtensions ilə noEmit aktiv edin: belə olduqda öz fayllarınızı .ts uzantısı ilə import etmək olur — Prisma mövzularındakı ./generated/prisma/client.ts kimi. tsx tipləri yoxlamır — bunu tsc --noEmit edir.
20 sətirdə ilk server
// src/index.ts
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
const typeDefs = `#graphql
type Query {
hello: String!
}
`;
const resolvers = {
Query: {
hello: () => 'Hello, GraphQL!',
},
};
const server = new ApolloServer({ typeDefs, resolvers });
const { url } = await startStandaloneServer(server, {
listen: { port: 4000 },
});
console.log(`Server ready at ${url}`);typeDefs— SDL dilində sətir kimi yazılmış sxem.#graphqlşərhi serverə təsir etmir, amma redaktora sintaksisi rəngləməyi bildirir.resolvers— obyekt-«xəritə»: tipin adı (Query), sahənin adı (hello) və məlumatı qaytaran funksiya. Bu funksiyanı resolver adlandırırlar.new ApolloServer({ typeDefs, resolvers })serveri yığır,startStandaloneServerisə onun ətrafında HTTP server başladır — Express lazım deyil — vəurlqaytarır.
npm run dev əmrini işə salın — konsolda Server ready at http://localhost:4000/ görünəcək. Ünvanı brauzerdə açın: bu Apollo Sandbox-dur. Əməliyyatlar panelinə { hello } yazıb işə salın — cavab olaraq { "data": { "hello": "Hello, GraphQL!" } } gələcək. Sənədlər və avtotamamlama sxeminizdən özü qurulur — bu, birinci dərsdəki introspection-dur.
💡 Sandbox
NODE_ENVproduction-a bərabər olmayana qədər görünür; production-da onun yerinə sadə səhifə çıxır, introspection isə susmaya görə söndürülür (ətraflı — təhlükəsizlik dərsində).