Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Versi 2.0.2
Lakukan operasi penyisipan, kueri, dan update pada database Cloud Spanner.
Konten ini memberikan referensi untuk mengonfigurasi dan menggunakan ekstensi ini. Sebelum menggunakan ekstensi dari proxy API menggunakan kebijakan ExtensionCallout, Anda harus:
Buat instance Cloud Spanner, seperti yang dijelaskan dalam Membuat dan Mengelola Instance, lalu buat database.
Setelah Anda memiliki instance dan database, berikan izin untuk mengakses database Anda ke akun layanan Google Cloud yang mewakili ekstensi Anda. Untuk mengetahui informasi selengkapnya tentang peran yang akan digunakan, lihat Peran Cloud Spanner. Untuk mengetahui informasi selengkapnya tentang kontrol akses Cloud Spanner, lihat Menerapkan Peran IAM dan Kontrol Akses untuk Cloud Spanner.
Jika Anda memiliki akun layanan yang memiliki izin untuk tingkat akses ke database yang Anda inginkan, gunakan Konsol Google Cloud untuk membuat kunci bagi akun layanan tersebut. Gunakan konten file JSON kunci yang dihasilkan saat Anda mengonfigurasi ekstensi ini.
Gunakan konten file JSON kunci yang dihasilkan saat menambahkan dan mengonfigurasi ekstensi menggunakan referensi konfigurasi.
Tentang Cloud Spanner
Cloud Spanner adalah layanan database relasional yang berguna untuk data relasional, terstruktur, dan semi-terstruktur yang memerlukan ketersediaan tinggi, konsistensi kuat, serta baca dan tulis transaksional.
Jika Anda baru mulai menggunakan Cloud Spanner, mulai cepat di dokumentasi Cloud Spanner adalah tempat yang tepat untuk memulai.
Contoh
Contoh berikut menggambarkan cara mengonfigurasi dukungan untuk tindakan ekstensi Cloud Spanner menggunakan kebijakan ExtensionCallout.
Tambahkan data
Dalam contoh berikut, tindakan insert ekstensi menambahkan pengguna baru ke tabel pengguna.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Insert-New-User">
<DisplayName>Insert New User</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows" : [{
"username": "jonesy42",
"firstName": "Floyd",
"lastName": "Jones",
"address": "3695 Auctor Street",
"city": "Gresham",
"region": "OR",
"postalCode": "12693",
"email": "floydster@example.com"
}]
}]]></Input>
</ConnectorCallout>
Mendapatkan data
Dalam contoh ini, kueri mengambil nilai nama pengguna dan email dari tabel user.
Pertama, kebijakan AssignMessage menetapkan variabel postal.code.value untuk digunakan dalam klausa WHERE kueri. Ini adalah contoh. Kebijakan Anda mungkin akan menetapkan nilai berdasarkan parameter permintaan klien.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Postal-Code">
<AssignTo createNew="true" transport="http" type="request"/>
<AssignVariable>
<Name>postal.code</Name>
<Value>86519</Value>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
Kebijakan ExtensionCallout berikut menjalankan kueri terhadap database, menggunakan konten variabel postal.code.value dalam klausa WHERE.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-User-Data">
<DisplayName>Get User Data</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
<Output>spanner.userdata.retrieved</Output>
</ConnectorCallout>
AssignMessage policy berikut kemudian menggunakan respons ekstensi,
yang disimpan dalam variabel spanner.userdata.retrieved, sebagai respons yang ditampilkan
kepada klien.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Query-Response-Data">
<DisplayName>Get Query Response Data</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{spanner.userdata.retrieved}</Payload>
</Set>
</AssignMessage>
Dalam contoh ini, data respons ditampilkan sebagai JSON seperti berikut.
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
Memperbarui data
Dalam contoh ini, elemen <Input> berisi username -- kunci utama tabel -- dan nilai baru untuk kolom email.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Update-User-Data">
<DisplayName>Update User Data</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>update</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows": [{
"username":"Liz456",
"email":"lizzard@example.com"
}]
}]]></Input>
</ConnectorCallout>
Tindakan
insert
Menyisipkan baris yang ditentukan ke dalam database.
Sintaksis
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "table-to-insert-into",
"rows" : "rows-to-insert"
}]]></Input>
Contoh
Dalam contoh berikut, tindakan insert ekstensi menambahkan pengguna baru ke tabel pengguna. Satu baris ditambahkan.
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows" : [{
"username": "jonesy42",
"firstName": "Floyd",
"lastName": "Jones",
"address": "3695 Auctor Street",
"city": "Gresham",
"region": "OR",
"postalCode": "12693",
"email": "floydster@example.com"
}]
}]]></Input>
Parameter permintaan
| Parameter | Deskripsi | Jenis | Default | Wajib |
|---|---|---|---|---|
| nama tabel | Tabel dalam database tempat baris harus disisipkan. | String | Tidak ada. | Ya. |
| baris | Baris yang akan disisipkan dinyatakan sebagai array dalam objek JSON rows. |
Array | Tidak ada. | Ya. |
Respons
Tidak ada.
querySQL
Membuat kueri database menggunakan pernyataan SQL dengan parameter yang ditentukan. Parameter diberikan dalam pernyataan SQL dengan nama yang diawali @; nilai parameter ditentukan dalam parameter params tindakan ini.
Untuk mengetahui detail tentang sintaksis kueri Cloud Spanner, lihat Sintaksis Kueri.
Sintaksis
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "sql-query-statement",
"params" : {
"param1" : "columnValue"
}
}]]></Input>
Contoh
Dalam contoh ini, kueri mengambil nilai kolom username dan email dari tabel user. Pernyataan SQL menentukan parameter postalCode yang ditetapkan dari variabel alur postal.code.value.
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
Parameter permintaan
| Parameter | Deskripsi | Jenis | Default | Wajib |
|---|---|---|---|---|
| sql | Kueri SQL yang akan dijalankan. Anda dapat menentukan parameter dengan nama parameter yang diawali @. Nama parameter tersebut harus sesuai dengan kunci dalam parameter params tindakan ini. |
String | Tidak ada. | Ya. |
| params | Objek yang kunci dan nilainya adalah nama dan nilai parameter yang digunakan dalam kueri SQL. Anda dapat mencantumkan beberapa parameter di sini. | Objek | Tidak ada. | Tidak. |
Respons
Objek rows yang berisi array pasangan nama-nilai kolom yang ditampilkan oleh kueri. Contoh:
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
update
Memperbarui baris dalam database dengan data yang ditentukan.
Sintaksis
<Input><![CDATA[{
"tableName" : "table-with-rows-to-update",
"rows" : "rows-to-update"
}]]></Input>
Contoh
Dalam contoh ini, alamat email untuk pengguna yang username-nya adalah Liz456 diperbarui dengan nilai baru. Satu baris diperbarui.
<Action>update</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows": [{
"username":"Liz456",
"email":"lizzard@example.com"
}]
}]]></Input>
Parameter permintaan
| Parameter | Deskripsi | Jenis | Default | Wajib |
|---|---|---|---|---|
| nama tabel | Tabel dalam database tempat baris harus diperbarui. | String | Tidak ada. | Ya. |
| baris | Array data baris yang akan diperbarui. Setiap entity dalam array harus berisi nilai ID unik (seperti kunci utama) untuk baris yang akan diupdate. | Array | Tidak ada. | Ya. |
Respons
Tidak ada.
Referensi Konfigurasi
Gunakan hal berikut saat Anda mengonfigurasi dan men-deploy ekstensi ini untuk digunakan di proxy API. Untuk mengetahui langkah-langkah mengonfigurasi ekstensi menggunakan konsol Apigee, lihat Menambahkan dan mengonfigurasi ekstensi.
Properti ekstensi umum
Properti berikut ada untuk setiap ekstensi.
| Properti | Deskripsi | Default | Wajib |
|---|---|---|---|
name |
Nama yang Anda berikan pada konfigurasi ekstensi ini. | Tidak ada | Ya |
packageName |
Nama paket ekstensi seperti yang diberikan oleh Apigee Edge. | Tidak ada | Ya |
version |
Nomor versi untuk paket ekstensi tempat Anda mengonfigurasi ekstensi. | Tidak ada | Ya |
configuration |
Nilai konfigurasi khusus untuk ekstensi yang Anda tambahkan. Lihat Properti untuk paket ekstensi ini | Tidak ada | Ya |
Properti untuk paket ekstensi ini
Tentukan nilai untuk properti konfigurasi berikut yang khusus untuk ekstensi ini.
| Properti | Deskripsi | Default | Wajib |
|---|---|---|---|
| projectId | ID project Google Cloud yang berisi database. | Tidak ada. | Ya. |
| instanceId | ID instance Cloud Spanner di project Google Cloud Anda. | Tidak ada. | Ya. |
| databaseId | ID database Cloud Spanner. | Tidak ada. | Ya. |
| credentials | Jika dimasukkan di konsol Apigee Edge, ini adalah konten file kunci akun layanan Anda. Saat dikirim menggunakan Management API, nilai ini adalah nilai yang dienkode base64 yang dihasilkan dari file kunci akun layanan. | Tidak ada. | Ya. |