모든 노트 목록 조회 API 추가하기
This chapter has been archived and is no longer updated. View the current version of the guide.
모든 노트 목록을 반환하는 API 추가하기
이제 사용자가 가지고 있는 모든 노트 목록을 반환하는 API를 추가할 차례입니다.
함수 추가하기
services/functions/list.js
라는 새 파일을 만들고 다음 내용을 추가합니다.
import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";
export const main = handler(async (event, context) => {
const params = {
TableName: process.env.tableName,
// 'KeyConditionExpression'은 쿼리 조건을 정의합니다.
// - 'userId = :userId': 'userId'가 일치하는 항목만 반환합니다.
// 파티션 키
KeyConditionExpression: "userId = :userId",
// 'ExpressionAttributeValues'는 조건의 값을 정의합니다.
// - ':userId': 작성자의 id를 'userId'로 정의합니다.
ExpressionAttributeValues: {
":userId": "123",
},
};
const result = await dynamoDb.query(params);
// 응답 본문에 일치하는 항목 목록을 반환합니다.
return result.Items;
});
이 코드는 get.js
와 거의 동일하지만, 전달한 userId
와 일치하는 항목만 반환하도록 조건을 사용합니다. 여기서는 여전히 123
으로 하드코딩되어 있습니다.
API 엔드포인트 설정
serverless.yml
파일을 열고 다음 내용을 추가합니다.
list:
# list.js의 main 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
# - path: URL 경로는 /notes
# - method: GET 요청
handler: list.main
events:
- http:
path: notes
cors: true
method: get
이 설정은 GET 요청을 처리하는 /notes
엔드포인트를 정의합니다.
테스트
mocks/list-event.json
파일을 생성하고 다음 내용을 추가합니다.
{}
이 가이드에서 나중에 이 부분을 대체할 예정이므로 아직은 빈 mock 이벤트를 추가합니다.
그리고 프로젝트의 루트 디렉토리에서 함수를 호출합니다.
$ serverless invoke local --function list --path mocks/list-event.json
응답은 다음과 비슷하게 나타납니다.
{
"statusCode": 200,
"body": "[{\"attachment\":\"hello.jpg\",\"content\":\"hello world\",\"createdAt\":1602891322039,\"noteId\":\"42244c70-1008-11eb-8be9-4b88616c4b39\",\"userId\":\"123\"}]"
}
이 API는 단일 노트 객체를 반환하는 get.js
함수와 달리 노트 객체 배열을 반환합니다.
다음으로 노트를 업데이트하는 API를 추가할 예정입니다.
For help and discussion
Comments on this chapter