#mongo-db #api-testing #atlas #local #http-api #http-server #ci

应用 mongodb-data-api

用于测试的本地MongoDB Atlas数据API

2个版本

0.1.3 2023年8月11日
0.1.2 2023年8月11日

#1830数据库接口

Apache-2.0

31KB
695 代码行

MongoDB Atlas数据API

一个小型服务器,用于提供MongoDB Atlas数据API的测试用途。使用TCP连接到MongoDB,并提供了HTTP API,这可能在没有TCP的情况下很有用。

请勿在生产环境中使用,跳过除了我们在CI中可能需要的一切。非常不安全,可能破坏一切。

用法

Usage: mongodb-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

要连接到MongoDB实例,将URL作为参数传递给API

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

这连接到在提供的docker-compose文件中定义的MongoDB。当服务运行时(默认地址为http:/127.0.0.1:3000),您可以开始向它发送请求。

Docker

仓库包含一个示例docker-compose文件,用于与本地MongoDB一起使用API。映像可以在Docker Hub找到。

查找一个

官方文档

> 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" } }
  }'

查找

官方文档

> 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" } }
  }'

插入一个

官方文档

> 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" }
  }'

插入多个

官方文档

> 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" }]
  }'

更新一个

官方文档

> 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" } }
  }'

更新多个

官方文档

> 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" } }
  }'

删除一个

官方文档

> 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" } }
  }'

删除多个

官方文档

> 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" } }
  }'

聚合

官方文档

我们目前真的不需要这个(还)。它在这个服务中已实现,但尚未测试。

删除数据库

这是一个非官方命令,但在测试运行后清理时很有用。删除请求中定义的数据库。

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

依赖项

~29–41MB
~752K SLoC