メインコンテンツへスキップ
POST
/
v2
/
databases
/
{database_id}
/
snapshots
スナップショットの作成
curl --request POST \
  --url https://api.squarecloud.app/v2/databases/{database_id}/snapshots \
  --header 'Authorization: <authorization>'
import requests

url = "https://api.squarecloud.app/v2/databases/{database_id}/snapshots"

headers = {"Authorization": "<authorization>"}

response = requests.post(url, headers=headers)

print(response.text)
const options = {method: 'POST', headers: {Authorization: '<authorization>'}};

fetch('https://api.squarecloud.app/v2/databases/{database_id}/snapshots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.squarecloud.app/v2/databases/{database_id}/snapshots",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

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

func main() {

url := "https://api.squarecloud.app/v2/databases/{database_id}/snapshots"

req, _ := http.NewRequest("POST", url, nil)

req.Header.Add("Authorization", "<authorization>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.squarecloud.app/v2/databases/{database_id}/snapshots")
.header("Authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.squarecloud.app/v2/databases/{database_id}/snapshots")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'

response = http.request(request)
puts response.read_body
{
  "status":"success",
  "response":{
    "url":"https://snapshots.squarecloud.app/databases/384443501775028242/a14b8d5e1cb7405a851eb4c075506121.zip?AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D",
    "key":"AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D"
  }
}
{
  "status": "error",
  "code": "SNAPSHOT_PROCESSING"
}
{
  "status": "error",
  "code": "KEEP_CALM",
  "message": "You already requested a snapshot recently. Please wait a minute before trying again. 1r/5s"
}
{
  "status": "error",
  "code": "DAILY_SNAPSHOTS_LIMIT_REACHED",
  "message": "You are being rate limited for daily snapshots. 8r/24h"
}
各アカウントは 24 時間ごとに最大 (RAM / 256) * 2 回のスナップショットを実行できます。
Authorization
string
必須
アカウントの API キーです。これはアカウント設定で確認できます。

パラメータ

database_id
string
必須
データベースの ID。

ソフトデッドラインの挙動

このルートは ソフトデッドライン モデルに従います。つまり、常に同期的に応答するわけではなくなりました。
  • スナップショットが 約 90 秒以内 に完了した場合、ルートは従来どおり 200 success と署名付きダウンロード URL(30 日間有効)を返します。
  • スナップショットの生成に 約 90 秒以上 かかる場合、ルートは 即座に 202 とコード SNAPSHOT_PROCESSING を返します。これは失敗ではありません。 スナップショットはバックグラウンドで生成され続け、通常は約 2 分以内に自動的に スナップショット一覧 に表示されます。これは大規模なデータベースでは想定される挙動です。
この POST エンドポイントをポーリングの仕組みとして使用しないでください。SNAPSHOT_PROCESSING のスナップショットが完了したかどうかを確認するには、別の POST ではなく、スナップショット一覧GET)エンドポイントを使用してください。スナップショットの完了後に再度 POST すると、まったく新しいスナップショットが最初から開始されます。
クライアントはレスポンスに応じて次のように分岐する必要があります。
レスポンス意味対応
status === "success"スナップショットの準備完了。url を使ってダウンロードします。
status === "error" かつ code === "SNAPSHOT_PROCESSING"スナップショットはまだ生成中。約 2 分待ってから、スナップショット一覧GET)で確認します。再度 POST しない でください。
status === "error" でその他の code実際の失敗。エラーを処理します(以下を参照)。

レスポンス

status
string
呼び出しが成功したかどうかを示します。成功した場合は success、失敗した場合は error です。
response
object
レスポンスの内容。statussuccess の場合のみ存在します。
SNAPSHOT_PROCESSING
202
スナップショットが約 90 秒のソフトデッドラインを超えた場合に返されます。スナップショットはバックグラウンドで生成され続けており、通常は約 2 分以内に自動的にスナップショット一覧に表示されます。エラーではありません。待機してから GET の一覧エンドポイントで確認してください。

エラー

スナップショットリクエストは 429 Too Many Requests で拒否されることがあります。code フィールドで 2 つのケースを区別します。
KEEP_CALM
429
短期的なクールダウン。ユーザーごと(5 秒あたり 1 リクエスト)またはデータベースごと(180 秒あたり 1 リクエスト)の制限に達しました。しばらく待ってから再試行してください。
DAILY_SNAPSHOTS_LIMIT_REACHED
429
1 日あたりのクォータに到達。アカウントがプランの 1 日あたりのスナップショット許容量(24 時間あたり (RAM / 256) × 2)を使い切りました。クォータは移動する 24 時間ウィンドウが進むにつれて解放されます。1 日あたりの許容量を増やすには、プランをアップグレードしてください。
{
  "status":"success",
  "response":{
    "url":"https://snapshots.squarecloud.app/databases/384443501775028242/a14b8d5e1cb7405a851eb4c075506121.zip?AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D",
    "key":"AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D"
  }
}
{
  "status": "error",
  "code": "SNAPSHOT_PROCESSING"
}
{
  "status": "error",
  "code": "KEEP_CALM",
  "message": "You already requested a snapshot recently. Please wait a minute before trying again. 1r/5s"
}
{
  "status": "error",
  "code": "DAILY_SNAPSHOTS_LIMIT_REACHED",
  "message": "You are being rate limited for daily snapshots. 8r/24h"
}