阿波罗服务器技能Skill apollo-server

本技能提供关于使用Apollo Server构建和优化GraphQL API的专家级指导。核心内容包括服务器配置、插件开发、缓存策略、联邦架构、身份验证和性能优化。适用于需要搭建高效、可扩展GraphQL后端的开发者。关键词:GraphQL API, Apollo Server, 后端开发, 缓存优化, 微服务, 身份验证, 性能调优。

后端开发 0 次安装 0 次浏览 更新于 2/26/2026

name: apollo-server description: Apollo Server 配置、插件、缓存、联邦和性能优化。 allowed-tools: Read, Write, Edit, Bash, Glob, Grep

Apollo Server 技能

使用 Apollo Server 实现 GraphQL API 的专家级协助。

能力

  • 使用 Express/Fastify 配置 Apollo Server
  • 实现日志记录和指标插件
  • 设置缓存策略
  • 构建 Apollo Federation 网关
  • 处理身份验证上下文
  • 通过持久化查询优化性能

使用场景

在以下情况下调用此技能:

  • 设置 Apollo Server
  • 实现缓存
  • 构建联邦服务
  • 添加自定义插件
  • 配置订阅

模式

基础设置

import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import express from 'express';
import http from 'http';
import cors from 'cors';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
import { createContext } from './context';

async function startServer() {
  const app = express();
  const httpServer = http.createServer(app);

  const server = new ApolloServer({
    typeDefs,
    resolvers,
    plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
  });

  await server.start();

  app.use(
    '/graphql',
    cors(),
    express.json(),
    expressMiddleware(server, {
      context: createContext,
    })
  );

  await new Promise<void>((resolve) =>
    httpServer.listen({ port: 4000 }, resolve)
  );

  console.log('服务器已就绪:http://localhost:4000/graphql');
}

上下文与身份验证

import { PrismaClient } from '@prisma/client';
import jwt from 'jsonwebtoken';

const prisma = new PrismaClient();

export interface Context {
  prisma: PrismaClient;
  user: { id: string; role: string } | null;
}

export async function createContext({ req }): Promise<Context> {
  const token = req.headers.authorization?.replace('Bearer ', '');
  let user = null;

  if (token) {
    try {
      user = jwt.verify(token, process.env.JWT_SECRET!) as Context['user'];
    } catch {}
  }

  return { prisma, user };
}

最佳实践

  • 使用插件处理横切关注点
  • 实现适当的错误格式化
  • 设置响应缓存
  • 使用 DataLoader 进行批处理

目标流程

  • graphql-api-开发
  • apollo-联邦
  • api-开发