API key

你的应用通过 API key 访问数据库:一个密钥和一个 secret,通过两个请求头发送。数据库、API key 和所有者都在 InceptionDB 控制台 中管理,使用你的 hola.cloud 账户登录。

创建数据库

在控制台中打开数据库选择器,选择 New database。大约一秒即可就绪。它的 ID 显示在概览页面上:这就是 INCEPTIONDB_DATABASE 的值。

创建 API key

  1. 选择数据库并打开 API keys & settings。
  2. 点击 New API key,以将使用它的应用命名,例如 backend-production。
  3. 复制 secret。它只显示一次:InceptionDB 只保存其哈希值。

控制台会给出可以直接使用的凭据,例如作为环境变量:

1export INCEPTIONDB_DATABASE="your-database-id"
2export INCEPTIONDB_API_KEY="your-api-key"
3export INCEPTIONDB_API_SECRET="your-api-secret"

一个 API key 可以访问其数据库中的所有集合,且只能访问这个数据库。

使用

在每个请求的 Api-Key 和 Api-Secret 请求头中发送密钥和 secret:

curl "https://inceptiondb.hola.cloud/v1/databases/$INCEPTIONDB_DATABASE/collections" \
  -H "Api-Key: $INCEPTIONDB_API_KEY" \
  -H "Api-Secret: $INCEPTIONDB_API_SECRET"
GET /v1/databases/$INCEPTIONDB_DATABASE/collections HTTP/1.1
Host: inceptiondb.hola.cloud
Api-Key: $INCEPTIONDB_API_KEY
Api-Secret: $INCEPTIONDB_API_SECRET
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://inceptiondb.hola.cloud/v1/databases/" + os.Getenv("INCEPTIONDB_DATABASE") + "/collections", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Api-Key", os.Getenv("INCEPTIONDB_API_KEY"))
	req.Header.Set("Api-Secret", os.Getenv("INCEPTIONDB_API_SECRET"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	responseBody, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(responseBody))
}
<?php
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => 'https://inceptiondb.hola.cloud/v1/databases/' . getenv('INCEPTIONDB_DATABASE') . '/collections',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => [
        'Api-Key: ' . getenv('INCEPTIONDB_API_KEY'),
        'Api-Secret: ' . getenv('INCEPTIONDB_API_SECRET'),
    ],
]);

$response = curl_exec($ch);
if ($response === false) {
    throw new Exception(curl_error($ch));
}
curl_close($ch);

echo $response;
import os
import requests

headers = {
    "Api-Key": os.environ["INCEPTIONDB_API_KEY"],
    "Api-Secret": os.environ["INCEPTIONDB_API_SECRET"],
}

response = requests.request(
    "GET",
    "https://inceptiondb.hola.cloud/v1/databases/" + os.environ["INCEPTIONDB_DATABASE"] + "/collections",
    headers=headers
)

print(response.text)
const response = await fetch("https://inceptiondb.hola.cloud/v1/databases/" + process.env.INCEPTIONDB_DATABASE + "/collections", {
  method: "GET",
  headers: {
    "Api-Key": process.env.INCEPTIONDB_API_KEY,
    "Api-Secret": process.env.INCEPTIONDB_API_SECRET
  }
});

console.log(await response.text());
// Fill in your values. Never put an API secret in code that runs in a public web page.
const INCEPTIONDB_DATABASE = "your-inceptiondb-database";
const INCEPTIONDB_API_KEY = "your-inceptiondb-api-key";
const INCEPTIONDB_API_SECRET = "your-inceptiondb-api-secret";

const response = await fetch("https://inceptiondb.hola.cloud/v1/databases/" + INCEPTIONDB_DATABASE + "/collections", {
  method: "GET",
  headers: {
    "Api-Key": INCEPTIONDB_API_KEY,
    "Api-Secret": INCEPTIONDB_API_SECRET
  }
});

const text = await response.text();
console.log(text);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        var request = HttpRequest.newBuilder()
            .uri(URI.create("https://inceptiondb.hola.cloud/v1/databases/" + System.getenv("INCEPTIONDB_DATABASE") + "/collections"))
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .header("Api-Key", System.getenv("INCEPTIONDB_API_KEY"))
            .header("Api-Secret", System.getenv("INCEPTIONDB_API_SECRET"))
            .build();

        var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
1[{"defaults":{"id":"uuid()"},"indexes":0,"name":"customers","total":3}]

密钥或 secret 错误时返回 403 Forbidden。

保证安全

  • 把 secret 保存在服务器上,放在环境变量或密钥管理器中。不要放在代码、代码仓库、网页或移动应用中:任何看到它的人都能读取和修改你的数据。
  • 每个应用或环境使用一个 API key。这样撤销其中一个不会影响其他的。
  • 如果 secret 泄露,创建一个新密钥并部署,然后在 API keys & settings 中撤销旧密钥。被撤销的密钥立即失效。

所有者

所有者是通过控制台管理数据库的 hola.cloud 用户:管理其集合、API key 和其他所有者。在 API keys & settings 中添加或移除。数据库始终至少保留一个所有者,且你不能移除自己。

账户操作与 API

创建、重命名和删除数据库,以及管理 API key 和所有者,都在控制台中完成。它们也是 HTTP 端点(见 API 参考),但需要已登录用户的会话:API key 无法调用它们。控制台中的每个操作都会显示其请求:点击屏幕右侧的小球即可查看。

评论

发表评论