> For the complete documentation index, see [llms.txt](https://docs.asserted.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.asserted.io/examples/rest-api.md).

# REST

## Features of this Example

* Basic authentication
* Storing and Reading Environment Variables in Asserted
* Test the list, create, get, update, and remove REST endpoints

### Walkthrough

This example was referenced in a walkthrough about [Node API Health Checks and Uptime](https://asserted.io/posts/node-api-health-check-uptime)

### Try it out

Repo is available [here](https://github.com/assertedio/node-uptime).

```bash
# Clone example
git clone https://github.com/assertedio/node-uptime

# Enter directory and install
cd graphql-uptime/
npm install

# Run asserted tests
npm run test:asrtd
```

### Tests

Can also be viewed on github here.

```javascript
const { expect } = require('chai');
const got = require('got');
const getenv = require('getenv');
const path = require('path');

require('dotenv').config({ path: path.join(__dirname, './.env') });

const TOKEN = getenv('TOKEN');

const client = got.extend({
  prefixUrl: 'http://localhost:3000',
  headers: { authorization: TOKEN },
});

describe('node api tests', () => {
  let userId;

  it('get all users', async () => {
    const { data } = await client.get('users').json();
    expect(data.length).to.eql(4);
  });

  it('create user', async () => {
    const { data } = await client.post('users', { json: { name: 'Foo Bario', email: 'foo@bar.io' }}).json();

    const { id, name, email } = data;
    userId = id;

    expect(userId).to.exist;
    expect(name).to.eql('Foo Bario');
    expect(email).to.eql('foo@bar.io');
  });

  it('get user', async () => {
    expect(userId).to.exist;

    const { data } = await client.get('users/' + userId).json();

    const { id, name, email } = data;

    expect(id).to.eql(userId);
    expect(name).to.eql('Foo Bario');
    expect(email).to.eql('foo@bar.io');
  });

  it('update user', async () => {
    expect(userId).to.exist;

    const { data } = await client.put('users/' + userId, { json: { name: 'Bar Yaz', email: 'bar@yaz.io' }}).json();

    const { id, name, email } = data;

    expect(id).to.eql(userId);
    expect(name).to.eql('Bar Yaz');
    expect(email).to.eql('bar@yaz.io');
  });

  it('remove user', async () => {
    expect(userId).to.exist;

    await client.delete('users/' + userId).json();

    const { data } = await client.get('users/' + userId).json();
    expect(data).to.eql(null);
  });
});

```
