---
# System prepended metadata

title: 操弄 Heroku App 的環境變數
tags: [heroku]

---

# 操弄 Heroku App 的環境變數

[TOC]

###### tags: `heroku`

---

## 認證/驗證

創建一個不會過期的 token <SUP>(令牌)</SUP>。

```shell
% heroku authorizations:create
Creating OAuth Authorization... !
heroku: Press any key to open up the browser to login or q to exit: 
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/…
Logging in... done
Logged in as someone@somewhere.net
Creating OAuth Authorization... done
Client:      <none>
ID:          fedcba98-7654-3210-fedc-ba9876543210
Description: Long-lived user authorization
Scope:       global
Token:       01234567-89ab-cdef-0123-456789abcdef
Updated at:  Wed Jan 12 2022 12:34:56 GMT+0800 (Taipei Standard Time) (less than a minute ago)
```

### 線上說明

:::info
```
create a new OAuth authorization

USAGE
  $ heroku authorizations:create

OPTIONS
   -S, --short                    only output token
   -d, --description=description  set a custom authorization description
   -e, --expires-in=expires-in    set expiration in seconds (default no expiration)
   -j, --json                     output in json format
   -s, --scope=scope              set custom OAuth scopes

DESCRIPTION
  This creates an authorization with access to your Heroku account.
```
:::

### 請求標頭

| 鍵              | 值                                       |
| --------------- | ---------------------------------------- |
| `Authorization` | `Bearer 令牌`                            |
| `Accept`        | `application/vnd.heroku+json; version=3` |


## 上限

每小時 **4500** 次(或每分鐘 **75** 次)調用。

> Tokens are added to the account pool at a rate of roughly **75 per minute** (or **4500 per hour**), up to a **maximum of 4500**. If no tokens remain, further calls will return **429 Too Many Requests** until more tokens become available.

## 取得 App ID

```
GET https://api.heroku.com/apps/${appName} HTTP/1.1
Authorization: Bearer ${token}
Accept: application/vnd.heroku+json; version=3
```

- 其實此為取得 App 相關信息用，若已知 App ID 並將 `${appName}` 改為 `${appId}` 結果也是一樣的。

出處：[App Info](https://devcenter.heroku.com/articles/platform-api-reference#app-info)。

## 取得 App 的環境變數

```
GET https://api.heroku.com/apps/${appId}/config-vars HTTP/1.1
Authorization: Bearer ${token}
Accept: application/vnd.heroku+json; version=3
```

詳見 [Config Vars Info for App]([link](https://devcenter.heroku.com/articles/platform-api-reference#config-vars-info-for-app))。

## 更新(或添加、刪除) App 的環境變數

```
PATCH https://api.heroku.com/apps/${appId}/config-vars HTTP/1.1
Authorization: Bearer ${token}
Accept: application/vnd.heroku+json; version=3
Content-Type: application/json
\r\n
{"VARIABLE_NAME":"variableValue"}
```

- 若變數已存在，則會**更新**變數值。
- 若變數不存在，則會**添加**該變數。
- 若變數值為 `null`，則會**刪除**該變數。
- 不需將原舊(其它)變數帶入。

詳見 [Config Vars Update]([link](https://devcenter.heroku.com/articles/platform-api-reference#config-vars-update))。

## 參考資料

- [Getting Started with the Platform API: Authentication](https://devcenter.heroku.com/articles/platform-api-quickstart#authentication)
- [Platform API Reference](https://devcenter.heroku.com/articles/platform-api-reference)
