> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Snapshots

> 为应用和数据库列出、创建和恢复 snapshot，或列出账户中的所有 snapshot。

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

Snapshot 有三种作用域：按应用、按数据库和账户级。

## Snapshot 结构体

列表方法返回 `[]squarecloud.Snapshot`：

| 字段         | 类型       | 说明                  |
| ---------- | -------- | ------------------- |
| `Name`     | `string` | Snapshot 对象名称       |
| `Size`     | `int`    | 大小（字节）              |
| `Modified` | `string` | 最后修改日期              |
| `Key`      | `string` | 用于构建下载 URL 的签名查询字符串 |

## 应用 snapshot

### 列出

```go theme={null}
snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

for _, snap := range snapshots {
	fmt.Println(snap.Name, snap.Size, snap.Modified)
}
```

### 创建

`api.CreateApplicationSnapshot(appID)` 触发一个新的 snapshot，并返回一个带有签名下载 URL 的 `squarecloud.SnapshotCreated`。

```go theme={null}
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(created.URL) // signed download URL
fmt.Println(created.Key)
```

### 恢复

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` 将应用回滚到之前的 snapshot 版本。

```go theme={null}
err := api.RestoreApplicationSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000",
	"abc123def4567890",
)
if err != nil {
	panic(err)
}
```

## 数据库 snapshot

数据库作用域与应用作用域相对应：

```go theme={null}
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(created.URL)

err = api.RestoreDatabaseSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000_mongo",
	"v1",
)
if err != nil {
	panic(err)
}
```

## 列出账户级 snapshot

`api.UserSnapshots(scope)` 返回你在所有应用或数据库中拥有的每一个 snapshot。作用域是 `squarecloud.SnapshotScope*` 常量之一：

```go theme={null}
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
	panic(err)
}

dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
	panic(err)
}
```

<Note>
  账户级 snapshot 列表需要有效的付费套餐。每个套餐还有**每日 snapshot 配额** —— 一旦用尽，创建会失败并返回 `DAILY_SNAPSHOTS_LIMIT_REACHED` 代码，它与通用的 `KEEP_CALM` 速率限制错误不同。
</Note>
