如何在AWS Amplify项目的Lambda函数内复用API Service的类型与mutation
复用Amplify自动生成Mutation与类型的最优方案
完全可以直接复用API.service.ts中Amplify Codegen自动生成的所有GraphQL操作定义与TypeScript类型,无需手动编写GraphQL语句、手动维护类型,有两种适配不同场景的实现方式:
方案1:Node.js环境(如Lambda)直接调用Amplify API客户端(优先推荐)
如果你的第三方服务接入逻辑运行在Node.js环境中(例如你项目中自定义的Lambda函数),可以直接引入轻量的Amplify API模块,完全复用前端一致的调用逻辑与类型校验:
- 安装必要依赖(无需引入全量Amplify包)
npm install @aws-amplify/core @aws-amplify/api
- 调用示例代码:
import { Amplify } from '@aws-amplify/core'; import { API } from '@aws-amplify/api'; // 直接导入生成好的Mutation常量与对应类型 import { PublishReportingLocationWorkflowProgressUpdate } from './API.service'; import type { PublishReportingLocationWorkflowProgressUpdateVariables, PublishReportingLocationWorkflowProgressUpdateMutation } from './API.service'; // 用环境变量配置Amplify API模块 Amplify.configure({ API: { graphql_endpoint: process.env.API_URL, graphql_api_key: process.env.API_KEY, } }); // 入参自带类型校验,参数错误TS编译阶段直接拦截 const variables: PublishReportingLocationWorkflowProgressUpdateVariables = { id: event.Payload.executionID, status: 'COMPLETE', reportingLocation_id: event.Payload.reportingLocation.id }; // 调用GraphQL接口,返回值自动关联类型 const response = await API.graphql<PublishReportingLocationWorkflowProgressUpdateMutation>({ query: PublishReportingLocationWorkflowProgressUpdate, variables: variables });
该方案完全复用前后端同一套操作定义与类型,Schema更新后只要重新执行amplify codegen生成新的API.service.ts,两端代码自动同步,无需手动修改。
方案2:自定义HTTP客户端场景复用导出常量
如果你的场景必须使用axios等自定义HTTP客户端发送请求,也无需手动编写GraphQL查询字符串,直接导入生成的Mutation常量即可:
import { PublishReportingLocationWorkflowProgressUpdate } from './API.service'; import type { PublishReportingLocationWorkflowProgressUpdateVariables } from './API.service'; import axios from 'axios'; // 入参仍可复用生成的类型校验 const variables: PublishReportingLocationWorkflowProgressUpdateVariables = { id: event.Payload.executionID, status: 'COMPLETE', reportingLocation_id: event.Payload.reportingLocation.id }; const response = await axios({ method: 'POST', url: process.env.API_URL, data: { query: PublishReportingLocationWorkflowProgressUpdate, variables: variables }, headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.API_KEY, } });
该方案省去了手动维护GraphQL语句的成本,同时保留了类型校验能力,和前端代码的定义完全一致。
额外优化提示
你可以在公共目录下把常用的Mutation、Query操作和对应类型统一重新导出,跨端调用时引用更方便,也更便于统一维护。
内容的提问来源于stack exchange,提问作者Jeremy Keczan
相关产品推荐
相关产品推荐

