노트 업데이트 API 추가하기
This chapter has been archived and is no longer updated. View the current version of the guide.
노트 업데이트 API 추가하기
이제 사용자가 특정 ID를 가진 노트를 새로운 노트 객체로 업데이트할 수 있는 API를 만들어 보겠습니다.
함수 추가하기
새로운 파일 update.js
를 생성하고 다음 코드를 붙여넣으세요.
import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";
export const main = handler(async (event, context) => {
const data = JSON.parse(event.body);
const params = {
TableName: process.env.tableName,
// 'Key'는 업데이트할 항목의 파티션 키와 정렬 키를 정의합니다.
Key: {
userId: "123", // 작성자의 ID
noteId: event.pathParameters.id, // 경로에서 가져온 노트의 ID
},
// 'UpdateExpression'은 업데이트할 속성을 정의합니다.
// 'ExpressionAttributeValues'는 업데이트 표현식의 값을 정의합니다.
UpdateExpression: "SET content = :content, attachment = :attachment",
ExpressionAttributeValues: {
":attachment": data.attachment || null,
":content": data.content || null,
},
// 'ReturnValues'는 항목의 속성을 반환할지 여부와 방법을 지정합니다.
// ALL_NEW는 업데이트 후 항목의 모든 속성을 반환합니다.
// 'result'를 통해 다른 설정과 어떻게 작동하는지 확인할 수 있습니다.
ReturnValues: "ALL_NEW",
};
await dynamoDb.update(params);
return { status: true };
});
이 코드는 create.js
함수와 비슷하게 보일 것입니다. 여기서는 새로운 content
와 attachment
값을 포함한 params
로 DynamoDB의 update
호출을 수행합니다.
API 엔드포인트 설정
serverless.yml
파일을 열고 다음 내용을 추가합니다.
update:
# update.js의 main 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
# - path: URL 경로는 /notes/{id}
# - method: PUT 요청
handler: update.main
events:
- http:
path: notes/{id}
cors: true
method: put
여기서는 /notes/{id}
엔드포인트에 대한 PUT 요청 핸들러를 추가합니다.
테스트
mocks/update-event.json
파일을 생성하고 다음 내용을 추가합니다.
또한, pathParameters
블록의 id
대신 우리가 사용 중인 노트의 noteId
를 사용하는 것을 잊지 마세요.
{
"body": "{\"content\":\"new world\",\"attachment\":\"new.jpg\"}",
"pathParameters": {
"id": "578eb840-f70f-11e6-9d1a-1359b3b22944"
}
}
그리고 루트 디렉토리에서 새로 생성한 함수를 호출합니다.
$ serverless invoke local --function update --path mocks/update-event.json
응답은 다음과 비슷하게 나타납니다.
{
"statusCode": 200,
"body": "{\"status\":true}"
}
다음으로, 주어진 id를 사용하여 노트를 삭제하는 API를 추가할 예정입니다.
For help and discussion
Comments on this chapter