Appsync 对多个表进行细粒度控制的变更
创始人
2024-09-11 13:00:41
0

要在AppSync中对多个表进行细粒度控制的变更,可以使用Lambda函数来处理数据的读取和写入操作,并在Lambda函数中进行必要的权限验证和逻辑处理。

以下是一个示例解决方案的代码示例:

  1. 创建一个Lambda函数来处理AppSync的请求:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event) => {
  const { operation, payload } = event.arguments;
  const { tableName, itemId, data } = payload;

  // 根据操作类型执行相应的操作
  switch (operation) {
    case 'create':
      return createItem(tableName, data);
    case 'update':
      return updateItem(tableName, itemId, data);
    case 'delete':
      return deleteItem(tableName, itemId);
    default:
      throw new Error(`Unsupported operation: ${operation}`);
  }
};

// 创建新项
async function createItem(tableName, data) {
  const params = {
    TableName: tableName,
    Item: data,
  };

  await docClient.put(params).promise();  // 使用DynamoDB的DocumentClient执行Put操作

  return data;
}

// 更新现有项
async function updateItem(tableName, itemId, data) {
  const params = {
    TableName: tableName,
    Key: { id: itemId },
    UpdateExpression: 'set #attr = :value',
    ExpressionAttributeNames: { '#attr': 'attribute' },
    ExpressionAttributeValues: { ':value': data.attribute },
    ReturnValues: 'ALL_NEW',
  };

  const result = await docClient.update(params).promise(); // 使用DynamoDB的DocumentClient执行Update操作

  return result.Attributes;
}

// 删除项
async function deleteItem(tableName, itemId) {
  const params = {
    TableName: tableName,
    Key: { id: itemId },
    ReturnValues: 'ALL_OLD',
  };

  const result = await docClient.delete(params).promise(); // 使用DynamoDB的DocumentClient执行Delete操作

  return result.Attributes;
}
  1. 在AppSync中创建一个新的数据源,类型为Lambda函数,并将上述Lambda函数与该数据源关联起来。

  2. 在AppSync的Schema定义中使用自定义的Mutation类型来描述细粒度的变更操作:

type Mutation {
  createItem(tableName: String!, data: ItemInput!): Item
  updateItem(tableName: String!, itemId: ID!, data: ItemInput!): Item
  deleteItem(tableName: String!, itemId: ID!): Item
}

input ItemInput {
  attribute: String!
}

type Item {
  id: ID!
  attribute: String!
}
  1. 部署和测试AppSync API。

现在,你可以使用AppSync的Mutation来创建、更新和删除表中的项。在每个Mutation中,你需要提供tableName参数来指定要操作的表名,以及data参数来指定要写入或更新的数据。Lambda函数将会根据请求的操作类型执行相应的操作,并返回相应的结果。

请注意,上述示例中使用的是AWS SDK for JavaScript来与DynamoDB进行交互。你可以根据自己的需求选择其他适合的方式来访问和操作DynamoDB。

相关内容

热门资讯

一分钟教你!创思维激k破解更新... 一分钟教你!创思维激k破解更新内容,创乐源辅助软件(有挂开挂辅助脚本);无需打开直接搜索打开薇:13...
透明有挂!科乐填大坑辅助视频,... 透明有挂!科乐填大坑辅助视频,hhpoker真能买到挂吗-原本有挂开挂辅助工具;无需打开直接搜索微信...
重大通报!浙江游戏大厅游戏辅助... 您好:浙江游戏大厅游戏辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用...
透视好友!福建十三水辅助,po... 透视好友!福建十三水辅助,pokermaster辅助器-原先有挂开挂辅助工具;无需打开直接搜索薇:1...
一分钟了解!陕西三代二辅助器,... 您好:陕西三代二辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌...
透视辅助!微信游戏决胜游戏辅助... 透视辅助!微信游戏决胜游戏辅助,pokemmo手机版脚本免费-素来有挂开挂辅助器;无需打开直接搜索加...
终于懂了!四川乐易麻将辅助脚本... 终于懂了!四川乐易麻将辅助脚本,萍乡滚筒四幅攻略(有挂开挂辅助器);无需打开直接搜索微信(13670...
透明讲解!微信小程序免费黑科技... 微信小程序免费黑科技是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加...
推荐一款!情怀游戏字牌辅助,花... 推荐一款!情怀游戏字牌辅助,花花生活圈怎么开挂(有挂开挂辅助神器);无需打开直接搜索加薇136704...
透视模拟器!小松宿松游戏辅助,... 透视模拟器!小松宿松游戏辅助,pokermaster破解版-原生有挂开挂辅助下载;无需打开直接搜索微...