local-atlas-data-api

Crates.iolocal-atlas-data-api
lib.rslocal-atlas-data-api
version0.1.1
sourcesrc
created_at2023-08-11 10:07:43.666508
updated_at2023-08-11 10:28:26.012291
descriptionA local MongoDB Atlas Data API for testing
homepage
repositoryhttps://github.com/grafbase/mongodb-data-api
max_upload_size
id941759
size98,900
Julius de Bruijn (pimeys)

documentation

README

Local MongoDB Atlas Data API

A small server serving MongoDB Atlas Data API for test usage. Connects to MongoDB using TCP and provides an HTTP API, which might be useful if TCP is not available.

Please do not use in production, skips everything else except things we might need in the CI. Super unsafe, probably destroys everything.

Usage

Usage: local-atlas-data-api [OPTIONS] --mongodb-url <MONGODB_URL>

Options:
      --hostname <HOSTNAME>        [default: 127.0.0.1]
      --port <PORT>                [default: 3000]
      --mongodb-url <MONGODB_URL>  
  -h, --help                       Print help
  -V, --version                    Print version

To connect to a MongoDB instance, pass the URL as a parameter to the API:

> local-atlas-data-api --mongodb-url "mongodb://grafbase:grafbase@localhost:27018"

This connects to the MongoDB defined in the provided docker-compose file. When the service is running (the default address is http:/127.0.0.1:3000), you can start sending requests to it.

Find One

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/findOne' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "projection": { "_id": 1, "foo": 1 },
      "filter": { "_id": { "$oid": "64d50a0b967f134bfb3fb620" } }
  }'

Find

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/find' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "projection": { "_id": 1, "foo": 1 },
      "filter": { "foo": { "$eq": "lol" } }
  }'

Insert One

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/insertOne' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "document": { "foo": "lol" }
  }'

Insert Many

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/insertMany' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "documents": [{ "foo": "bar" }, { "foo": "lolbar" }]
  }'

Update One

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/updateOne' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "filter": { "_id": { "$eq": { "$oid": "64d5dda2154ceb5e6cfdf94e" } } },
      "update": { "$set": { "foo": "musti" } }
  }'

Update Many

Official documentation

> curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/updateMany' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "filter": { "foo": { "$eq": "lol" } },
      "update": { "$set": { "foo": "rofl" } }
  }'

Delete One

Official documentation

curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/deleteOne' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "filter": { "_id": { "$oid": "64d50a0b967f134bfb3fb620" } }
  }'

Delete Many

Official documentation

curl --request POST \
  'http://127.0.0.1:3000/app/data-test/endpoint/data/v1/action/deleteMany' \
  --header 'apiKey: TEST' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-raw '{
      "dataSource": "grafbase",
      "database": "test",
      "collection": "test",
      "filter": { "foo": { "$eq": "rofl" } }
  }'

Aggregate

Official documentation

We don't really need this (yet). It's implemented in this service, but not tested.

Commit count: 29

cargo fmt