Add a Get Note API
이제 데이터베이스에 노트를 생성하고 저장했습니다. 이제 생성된 노트 ID를 이용해 노트 정보를 불러오는 API를 추가해보겠습니다.
함수 추가하기
신규 파일인 get.js를 생성하고 아래 코드를 붙여넣기 합니다.
import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";
export const main = handler(async (event, context) => {
const params = {
TableName: "notes", // - 'userId': 인증 된 사용자의 ID 풀에 해당하는 인증 아이디 // - 'noteId': 경로 매개 변수
// 'Key'는 검색 할 항목의 파티션 키와 정렬 키를 정의합니다.
Key: {
userId: event.requestContext.identity.cognitoIdentityId,
noteId: event.pathParameters.id,
},
};
const result = await dynamoDb.get(params);
if (!result.Item) {
throw new Error("Item not found.");
}
// 불러온 아이템을 반환합니다.
return result.Item;
});
이 파일은 이전의 create.js 함수와 똑같은 구조를 따릅니다. 가장 큰 차이점은 요청을 통해 전달되는noteId 와 userId가 주어진 노트 객체를 얻기 위해 dynamoDb.get(params)을 수행한다는 것입니다.
API 엔드포인트 구성하기
serverless.yml 파일을 열고 아래 코드를 추가합니다.
get:
# get.js의 main 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
# - path: /notes/{id} url 경로
# - method: GET 요청
handler: get.main
events:
- http:
path: notes/{id}
method: get
cors: true
authorizer: aws_iam
이 코드 블록이 앞의 create 블록과 정확히 같은 방법으로 들여 쓰는지 확인하십시오.
이것은 get note API를 정의합니다. /notes/{id} 엔드포인트와 함께 GET 요청 핸들러를 추가합니다.
테스트
Get note API를 테스트하려면noteId 매개 변수를 전달해야합니다. 우리는 이전 장에서 작성한 노트의 noteId를 사용하고pathParameters 블록을 모의 객체에 추가 할 것입니다. 그러면 해당 내용은 아래와 유사하게 보일 것입니다. id의 값을 이전의 create.js 함수를 호출 할 때 받았던 ID로 대체하십시오.
mocks/get-event.json 파일을 만들고 아래 코드를 추가합니다.
{
"pathParameters": {
"id": "578eb840-f70f-11e6-9d1a-1359b3b22944"
},
"requestContext": {
"identity": {
"cognitoIdentityId": "USER-SUB-1234"
}
}
}
그리고 새로 생성된 함수를 실행합니다.
$ serverless invoke local --function get --path mocks/get-event.json
반환된 응답은 아래와 유사해야 합니다.
{
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true
},
body: '{"attachment":"hello.jpg","content":"hello world","createdAt":1487800950620,"noteId":"578eb840-f70f-11e6-9d1a-1359b3b22944","userId":"USER-SUB-1234"}'
}
다음으로 사용자가 가지고 있는 모든 노트들의 목록을 보여주는 API를 만들어 보겠습니다.
For help and discussion
Comments on this chapter