You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:36:06