Now that we created a note and saved it to our database, let’s add an API to retrieve a note given its id.

Add the Function

Change indicator Create a new file in packages/functions/src/get.ts in your project root with the following:

import { Table } from "sst/node/table";
import handler from "@notes/core/handler";
import dynamoDb from "@notes/core/dynamodb";

export const main = handler(async (event) => {
  const params = {
    TableName: Table.Notes.tableName,
    // 'Key' defines the partition key and sort key of
    // the item to be retrieved
    Key: {
      userId: "123", // The id of the author
      noteId: event?.pathParameters?.id, // The id of the note from the path
    },
  };

  const result = await dynamoDb.get(params);
  if (!result.Item) {
    throw new Error("Item not found.");
  }

  // Return the retrieved item
  return JSON.stringify(result.Item);
});

This follows exactly the same structure as our previous create.ts function. The major difference here is that we are doing a dynamoDb.get(params) to get a note object given the userId (still hardcoded) and noteId that’s passed in through the request.

Add the route

Let’s add a new route for the get note API.

Change indicator Add the following below the POST /notes route in stacks/ApiStack.ts.

"GET /notes/{id}": "packages/functions/src/get.main",

Deploy Our Changes

If you switch over to your terminal, you will notice that your changes are being deployed.

You should see that the new API stack has been deployed.

✓  Deployed:
   StorageStack
   ApiStack
   ApiEndpoint: https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com

Test the API

Let’s test the get notes API. In the previous chapter we tested our create note API. It should’ve returned the new note’s id as the noteId.

Change indicator Run the following in your terminal.

$ curl https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com/notes/<NOTE_ID>

Make sure to replace the endpoint URL with your ApiEndpoint value and the at the end of the URL with the `noteId` that was created previously.

Since we are making a simple GET request, we could also go to this URL directly in your browser.

The response should look something like this.

{"attachment":"hello.jpg","content":"Hello World","createdAt":1629336889054,"noteId":"a46b7fe0-008d-11ec-a6d5-a1d39a077784","userId":"123"}

Next, let’s create an API to list all the notes a user has.