Tutorial: Save data to a Datastore
In the last section, we made a HTTP request that created a 404. We'll use the trace of that HTTP request to build an endpoint, a technique we call Trace Driven Development.
-
Go to the 404 section of the sidebar and you should see the HTTP request that you just made with your REPL.
-
Hit the plus (+) button next to the 404. This creates a HTTP endpoint with the HTTP method (
POST
) and path (/test
) set from the request that creates the 404.
- Hover over the white dot on the left hand side. Here, you can see the full body of the incoming trace from when you posted to the endpoint from the REPL, including the body.
- Let's save the
request
body to a variable by typinglet data = request.body
. The autocomplete knows the field names ofrequest
from the trace, and will complete them for you.
- Let's put this in a datastore. Type "DB" to bring up a list of Darklang datastore functions.
In this case, we want DB::set
, which takes three arguments.
- Now let's make our datastore. Press
Ctrl-k
/Cmd-k
to bring up the omnibox, and create a new datastore called "Requests", with fieldsdata
andtime
.
-
Now that we have a datastore, let's finish our post endpoint.
The first argument is the record we're inserting. This needs to match the schema, and so it needs to include both
date
andtime
(you cannot insert records that are missing fields). Insert our data from above (seeing the live value to the left) and use theDate::now
function to get thetime
field.
- We need a unique key for each record that we store. The
DB::generateKey
function generates random keys – this is useful when your record has no obvious unique identifier.
- The final argument is the Datastore:
Requests
.
- To call the
DB::set
function, we first need to run the two functions with side effects (DB::generateKey
andDate::now
) by hitting the play button. After hitting those two play buttons, theDB::set
play button will be enabled:
- Finally, hitting the play button for
DB::set
inserts the record into the datastore. This locks the datastore, preventing us from changing the schema, which we see indicated by the red lock (🔒) icon.
Congratulations! You've created a Darklang Datastore and stored data inside it.