GraphQL1 min read

Apollo bilan plaginlar

Plaginlar Apollo Serverning asosiy funksionalligini kengaytirish imkonini beradi; ular ma'lum hodisalarga javoban custom operatsiyalarni bajaradi. Hozirda bu hodisalar GraphQL so'r

Plaginlar Apollo Serverning asosiy funksionalligini kengaytirish imkonini beradi; ular ma'lum hodisalarga javoban custom operatsiyalarni bajaradi. Hozirda bu hodisalar GraphQL so'rovining hayotiy sikli bosqichlariga va Apollo Serverning ishga tushishiga mos keladi (batafsil bu yerda). Masalan, oddiy logging plagini Apollo Serverga yuborilgan har bir so'rov bilan bog'liq GraphQL query satrini loglashi mumkin.

Custom plaginlar

Plagin yaratish uchun @nestjs/apollo paketidan eksport qilinadigan @Plugin dekoratori bilan belgilangan klassni e'lon qiling. Shuningdek, yaxshiroq kod autocomplete uchun @apollo/server paketidan ApolloServerPlugin interfeysini implementatsiya qiling.

TypeScript
1import { ApolloServerPlugin, GraphQLRequestListener } from '@apollo/server';
2import { Plugin } from '@nestjs/apollo';
3
4@Plugin()
5export class LoggingPlugin implements ApolloServerPlugin {
6  async requestDidStart(): Promise<GraphQLRequestListener<any>> {
7    console.log('Request started');
8    return {
9      async willSendResponse() {
10        console.log('Will send response');
11      },
12    };
13  }
14}

Shu bilan, LoggingPlugin ni provider sifatida ro'yxatdan o'tkazishimiz mumkin.

TypeScript
1@Module({
2  providers: [LoggingPlugin],
3})
4export class CommonModule {}

Nest plaginni avtomatik instansiyalaydi va Apollo Serverga qo'llaydi.

Tashqi plaginlardan foydalanish

Bir nechta tayyor plaginlar mavjud. Mavjud plaginni ishlatish uchun uni import qiling va plugins massiviga qo'shing:

TypeScript
1GraphQLModule.forRoot({
2  // ...
3  plugins: [ApolloServerOperationRegistry({ /* options */})]
4}),
Hint

ApolloServerOperationRegistry plagini @apollo/server-plugin-operation-registry paketidan eksport qilinadi.

Mercurius bilan plaginlar

Meruriusga xos Fastify plaginlarining ayrimlari mercurius plaginidan keyin plugin tree ichida yuklanishi kerak (batafsil bu yerda).

Warning

mercurius-upload bundan mustasno va main faylda ro'yxatdan o'tkazilishi kerak.

Buning uchun MercuriusDriver ixtiyoriy plugins konfiguratsiya opsiyasini taqdim etadi. U plugin va options atributlaridan iborat obyektlar massivini ifodalaydi. Shuning uchun cache pluginni ro'yxatdan o'tkazish quyidagicha ko'rinadi:

TypeScript
1GraphQLModule.forRoot({
2  driver: MercuriusDriver,
3  // ...
4  plugins: [
5    {
6      plugin: cache,
7      options: {
8        ttl: 10,
9        policy: {
10          Query: {
11            add: true
12          }
13        }
14      },
15    }
16  ]
17}),