Mulai cepat: Pustaka Azure Cosmos DB for NoSQL untuk Go
BERLAKU UNTUK: NoSQL
Mulai menggunakan pustaka klien Azure Cosmos DB for NoSQL untuk Go untuk mengkueri data dalam kontainer Anda dan melakukan operasi umum pada item individual. Ikuti langkah-langkah ini untuk menyebarkan solusi minimal ke lingkungan Anda menggunakan Azure Developer CLI.
Dokumentasi | referensi API Paket kode | sumber pustaka (Go) | Azure Developer CLI
Prasyarat
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Akun GitHub
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Azure Developer CLI
- Desktop Docker
Menyiapkan
Sebarkan kontainer pengembangan proyek ini ke lingkungan Anda. Kemudian, gunakan Azure Developer CLI (azd
) untuk membuat akun Azure Cosmos DB for NoSQL dan menyebarkan aplikasi sampel dalam kontainer. Aplikasi sampel menggunakan pustaka klien untuk mengelola, membuat, membaca, dan mengkueri data sampel.
Penting
Akun GitHub mencakup pemberian izin penyimpanan dan jam inti tanpa biaya. Untuk informasi selengkapnya, lihat penyimpanan dan jam inti yang disertakan untuk akun GitHub.
Buka terminal di direktori akar proyek.
Autentikasi ke Azure Developer CLI menggunakan
azd auth login
. Ikuti langkah-langkah yang ditentukan oleh alat untuk mengautentikasi ke CLI menggunakan kredensial Azure pilihan Anda.azd auth login
Gunakan
azd init
untuk menginisialisasi proyek.azd init
Selama inisialisasi, konfigurasikan nama lingkungan yang unik.
Tip
Nama lingkungan juga akan digunakan sebagai nama grup sumber daya target. Untuk mulai cepat ini, pertimbangkan untuk menggunakan
msdocs-cosmos-db
.Sebarkan akun Azure Cosmos DB menggunakan
azd up
. Templat Bicep juga menyebarkan aplikasi web sampel.azd up
Selama proses provisi, pilih langganan dan lokasi yang Anda inginkan. Tunggu hingga proses provisi selesai. Prosesnya dapat memakan waktu sekitar lima menit.
Setelah provisi sumber daya Azure Anda selesai, URL ke aplikasi web yang sedang berjalan disertakan dalam output.
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
Gunakan URL di konsol untuk menavigasi ke aplikasi web Anda di browser. Amati output aplikasi yang sedang berjalan.
Memasang pustaka klien
Pustaka klien tersedia melalui Go, sebagai azcosmos
paket.
Buka terminal dan navigasi ke
/src
folder .cd ./src
Jika belum diinstal, instal
azcosmos
paket menggunakango install
.go install github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
Selain itu
azidentity
, instal paket jika belum diinstal.go install github.com/Azure/azure-sdk-for-go/sdk/azidentity
Buka dan tinjau file src/go.mod untuk memvalidasi bahwa
github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
entri dangithub.com/Azure/azure-sdk-for-go/sdk/azidentity
keduanya ada.
Model objek
Nama | Deskripsi |
---|---|
CosmosClient |
Kelas ini adalah kelas klien utama dan digunakan untuk mengelola metadata atau database di seluruh akun. |
CosmosDatabase |
Kelas ini mewakili database dalam akun. |
CosmosContainer |
Kelas ini terutama digunakan untuk melakukan operasi baca, perbarui, dan hapus pada kontainer atau item yang disimpan dalam kontainer. |
PartitionKey |
Kelas ini mewakili kunci partisi logis. Kelas ini diperlukan untuk banyak operasi dan kueri umum. |
Contoh kode
- Autentikasi klien
- Mendapatkan database
- Mendapatkan kontainer
- Membuat item
- Mendapatkan item
- Item kueri
Kode sampel dalam templat menggunakan database bernama cosmicworks
dan kontainer bernama products
. Kontainer products
berisi detail seperti nama, kategori, kuantitas, pengidentifikasi unik, dan bendera penjualan untuk setiap produk. Kontainer menggunakan /category
properti sebagai kunci partisi logis.
Mengautentikasi klien
Permintaan aplikasi ke sebagian besar layanan Azure harus diotorisasi. DefaultAzureCredential
Gunakan jenis sebagai cara yang disukai untuk menerapkan koneksi tanpa kata sandi antara aplikasi Anda dan Azure Cosmos DB untuk NoSQL. DefaultAzureCredential
mendukung beberapa metode autentikasi dan menentukan metode autentikasi yang harus digunakan saat runtime bahasa umum.
Penting
Anda juga dapat mengotorisasi permintaan ke layanan Azure menggunakan kata sandi, string koneksi, atau kredensial lainnya secara langsung. Namun, pendekatan ini harus digunakan dengan hati-hati. Pengembang harus rajin untuk tidak pernah mengekspos rahasia ini di lokasi yang tidak aman. Siapa pun yang mendapatkan akses ke kata sandi atau kunci rahasia dapat mengautentikasi ke layanan database. DefaultAzureCredential
menawarkan manfaat manajemen dan keamanan yang ditingkatkan atas kunci akun untuk memungkinkan autentikasi tanpa kata sandi tanpa risiko menyimpan kunci.
Sampel ini membuat instans baru menggunakan CosmosClient
azcosmos.NewClient
dan mengautentikasi menggunakan DefaultAzureCredential
instans.
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
clientOptions := azcosmos.ClientOptions{
EnableContentResponseOnWrite: true,
}
client, err := azcosmos.NewClient(endpoint, credential, &clientOptions)
if err != nil {
return err
}
Mendapatkan database
Gunakan client.NewDatabase
untuk mengambil database yang sudah ada bernama cosmicworks
.
database, err := client.NewDatabase("cosmicworks")
if err != nil {
return err
}
Mendapatkan kontainer
Ambil kontainer yang products
ada menggunakan database.NewContainer
.
container, err := database.NewContainer("products")
if err != nil {
return err
}
Membuat item
Buat jenis Go dengan semua anggota yang ingin Anda serialkan ke JSON. Dalam contoh ini, jenis memiliki pengidentifikasi unik, dan bidang untuk kategori, nama, kuantitas, harga, dan penjualan.
type Item struct {
Id string `json:"id"`
Category string `json:"category"`
Name string `json:"name"`
Quantity int `json:"quantity"`
Price float32 `json:"price"`
Clearance bool `json:"clearance"`
}
Buat item dalam kontainer menggunakan container.UpsertItem
. Metode ini "upsert" item secara efektif mengganti item jika sudah ada.
item := Item {
Id: "70b63682-b93a-4c77-aad2-65501347265f",
Category: "gear-surf-surfboards",
Name: "Yamba Surfboard",
Quantity: 12,
Price: 850.00,
Clearance: false,
}
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
context := context.TODO()
bytes, err := json.Marshal(item)
if err != nil {
return err
}
response, err := container.UpsertItem(context, partitionKey, bytes, nil)
if err != nil {
return err
}
Baca item
Lakukan operasi baca titik dengan menggunakan bidang pengidentifikasi unik (id
) dan kunci partisi. Gunakan container.ReadItem
untuk mengambil item tertentu secara efisien.
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
context := context.TODO()
itemId := "70b63682-b93a-4c77-aad2-65501347265f"
response, err := container.ReadItem(context, partitionKey, itemId, nil)
if err != nil {
return err
}
if response.RawResponse.StatusCode == 200 {
read_item := Item{}
err := json.Unmarshal(response.Value, &read_item)
if err != nil {
return err
}
Buat kueri item
Lakukan kueri melalui beberapa item dalam kontainer menggunakan container.NewQueryItemsPager
. Temukan semua item dalam kategori tertentu menggunakan kueri berparameter ini:
SELECT * FROM products p WHERE p.category = @category
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
query := "SELECT * FROM products p WHERE p.category = @category"
queryOptions := azcosmos.QueryOptions{
QueryParameters: []azcosmos.QueryParameter{
{Name: "@category", Value: "gear-surf-surfboards"},
},
}
pager := container.NewQueryItemsPager(query, partitionKey, &queryOptions)
Uraikan hasil kueri yang dipaginasi dengan mengulangi setiap halaman hasil menggunakan pager.NextPage
. Gunakan pager.More
untuk menentukan apakah ada hasil yang tersisa di awal setiap perulangan.
context := context.TODO()
items := []Item{}
requestCharge := float32(0)
for pager.More() {
response, err := pager.NextPage(context)
if err != nil {
return err
}
requestCharge += response.RequestCharge
for _, bytes := range response.Items {
item := Item{}
err := json.Unmarshal(bytes, &item)
if err != nil {
return err
}
items = append(items, item)
}
}
Membersihkan sumber daya
Saat Anda tidak lagi memerlukan aplikasi sampel atau sumber daya, hapus penyebaran dan semua sumber daya yang sesuai.
azd down
Di GitHub Codespaces, hapus codespace yang sedang berjalan untuk memaksimalkan penyimpanan dan penetapan inti Anda.