Bagikan melalui


Gunakan @env() untuk substitusi variabel lingkungan di penyusun API Data

Penyusun API Data (DAB) memungkinkan Anda menyimpan rahasia (misalnya, string koneksi database) agar tidak tersimpan dalam dab-config.json dengan mengganti nilainya saat pemuatan. Mekanisme pertama yang didukung adalah @env() fungsi , yang menyelesaikan variabel lingkungan dari lingkungan proses host atau file lokal .env .

Lihat juga: the @akv() function.

Apa yang @env() dilakukan

Tempatkan referensi ke variabel lingkungan di mana saja nilai string diharapkan:

{
  "data-source": {
    "connection-string": "@env('SQL_CONN_STRING')"
  }
}

Pada waktu pemuatan konfigurasi, DAB memindai pola @env('VAR_NAME') dalam nilai string dan mengganti token dengan nilai lingkungan variabel VAR_NAME.

Sumber untuk nilai

Sumber Description
OS /lingkungan proses Variabel lingkungan standar ada saat proses DAB dimulai.
.env arsip File teks biasa dengan NAME=VALUE baris di direktori konfigurasi (untuk kenyamanan pengembangan lokal).

Nota

File .env mengambil alih variabel lingkungan proses/sistem yang ada saat keduanya menentukan nama yang sama. Jika Anda menyediakan file lokal .env untuk pengembangan, entrinya digunakan untuk memenuhi @env(pencarian 'var-name') tanpa melakukan panggilan ke lingkungan lokal.

Contoh .env file:

SQL_CONN_STRING=Server=localhost;Database=AppDb;User Id=app;Password=local-dev;
DB_TYPE=mssql
JOB_API_KEY=dev-job-key

Pedoman:

  • Tetap .env berdekatan dengan dab-config.json (atau di mana pun proses memulai Anda mengharapkannya).
  • Tambahkan .env ke .gitignore.
  • Baris kosong dan baris yang dimulai dengan # (jika didukung, verifikasi) biasanya diabaikan; konfirmasikan sebelum mendokumentasikan dukungan komentar.
  • Di Linux/macOS, nama peka huruf besar/kecil. Di Windows, mereka secara efektif tidak membedakan huruf besar dan kecil.

Menggunakan @env() dalam konfigurasi

Substitusi dasar

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@env('SQL_CONN_STRING')"
  }
}

Dikombinasikan dengan @akv()

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@akv('prod-sql-connection')"
  }
}

Parameter prosedur tersimpan

{
  "entities": {
    "RunJob": {
      "source": {
        "object": "dbo.RunJob",
        "type": "stored-procedure",
        "parameters": {
          "intParam": "@env('SP_PARAM1_INT')",
          "boolParam": "@env('SP_PARAM2_BOOL')"
        }
      },
      "permissions": [
        { "role": "anonymous", "actions": [ "execute" ] }
      ]
    }
  }
}

Nilai lingkungan digantikan sebagai string. Penguraian berikutnya (misalnya, ke int atau bool) ditangani oleh konfigurasi pemrosesan atau logika runtime.

Troubleshooting

Scenario Hasil
Variabel ditemukan Penggantian berhasil.
Variabel tidak ada Kemungkinan besar pemuatan konfigurasi gagal.
Variabel tidak ditemukan Diganti sebagai string kosong.
Beberapa @env() pada berbagai properti Semua diselesaikan secara independen.
Digunakan di mana nilai numerik atau bool diharapkan Nilai diganti sebagai string; parsing mungkin akan berhasil.
Pola tidak valid (misalnya @env(DB_VAR) tanda kutip yang hilang) Diperlakukan sebagai string harfiah.

Contoh lengkap

dab-config.json:

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@env('SQL_CONN_STRING')"
  },
  "runtime": {
    "rest": { "enabled": true }
  },
  "entities": {
    "Books": {
      "source": "dbo.Books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

.env:

DB_TYPE=mssql
SQL_CONN_STRING=Server=localhost;Database=BooksDb;User Id=app;Password=StrongPassword!;

Penting

Jangan memasukkan .env file yang berisi rahasia. |

Referensi cepat

Item Ringkasan
Syntax @env('variable-name')
File simulasi .env dengan name=value baris
Mencampur dengan @env() Supported.

Tinjauan

Gunakan @env() untuk menjaga rahasia dan nilai khusus lingkungan dari file konfigurasi. Pasangkan dengan manajemen rahasia yang disiplin, seperti penyimpanan variabel CI/CD atau definisi kontainer, untuk penyebaran yang aman dan fleksibel. Untuk mengunakan vault perusahaan, gabungkan @akv() dengan fungsi untuk memusatkan rahasia.