GSP363

Ringkasan
Dalam challenge lab, Anda diberi sebuah skenario dan serangkaian tugas. Tidak ada petunjuk langkah demi langkah. Anda akan menggunakan keahlian yang dipelajari dari lab dalam kursus untuk mencari cara menyelesaikan sendiri tugas-tugas tersebut. Sistem pemberian skor otomatis (ditampilkan pada halaman ini) akan memberikan masukan tentang apakah Anda telah menyelesaikan tugas dengan benar atau tidak.
Saat mengikuti challenge lab, Anda tidak akan diajari konsep-konsep baru Google Cloud. Anda diharapkan dapat memperluas keahlian yang dipelajari, seperti mengubah nilai default dan membaca serta mengkaji pesan error untuk memperbaiki kesalahan Anda sendiri.
Untuk meraih skor 100%, Anda harus berhasil menyelesaikan semua tugas dalam jangka waktu tertentu.
Lab ini direkomendasikan bagi siswa yang sudah menyelesaikan lab di kursus Mengembangkan dan Mengamankan API dengan Apigee X. Apakah Anda siap menghadapi tantangan ini?
Penyiapan
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
- Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Skenario tantangan
Anda adalah seorang Cloud Engineer untuk Cymbal Shops, sebuah retailer nasional. Cymbal Shop berfokus pada penjualan global, dan layanan terjemahan telah diidentifikasi sebagai alat utama untuk membantu memperluas bisnis global. Anda bertanggung jawab untuk membuat versi pertama sebuah API penerjemahan.
Anda diharapkan memiliki keterampilan dan pengetahuan untuk menyelesaikan tugas ini, jadi panduan langkah demi langkah tidak disediakan.
Tantangan Anda
Anda akan membuat proxy API Apigee baru dan resource lainnya di organisasi Apigee project tersebut. Baca setiap deskripsi tugas, lalu buat fungsi yang diperlukan.
Error saat menyimpan
Saat menyimpan perubahan ke proxy API, Anda mungkin mengalami error Could not save new revision. Jika Anda menggunakan tombol dropdown Save (
), lalu memilih Save as new revision, Anda akan melihat pesan error yang memberi tahu Anda apa yang tidak valid.
Tugas 1. Membuat proxy Cloud Translation API
Cymbal Shops telah memutuskan untuk menggunakan Translation API Google Cloud sebagai layanan backend untuk proxy API.
Persyaratan:
- Di Konsol Google Cloud, pastikan Cloud Translation API diaktifkan di Library API.
- Buat akun layanan untuk proxy API bernama
apigee-proxy, dan berikan peran Logging > Logs Writer kepadanya.
- Di Konsol Google Cloud, dari Navigation menu, pilih Apigee untuk membuka UI Apigee dan membuat proxy API.
- Proxy API harus berupa reverse proxy bernama translate-v1, dengan jalur dasar /translate/v1.
- Target proxy API adalah URL HTTP untuk versi dasar Cloud Translation API (
https://translation.googleapis.com/language/translate/v2).
-
Jangan menambahkan otorisasi, CORS, atau kuota menggunakan halaman Kebijakan Umum di wizard proxy.
- Di halaman ringkasan, buat proxy API dengan membiarkan setelan pada nilai defaultnya.
- Tambahkan bagian Authentication ke TargetEndpoint default, sehingga token akses dikirim dengan setiap permintaan backend. Gunakan elemen GoogleAccessToken dengan Cakupan
https://www.googleapis.com/auth/cloud-translation.
Catatan:
Edit proxy dan di tab Develop, di bagian Target endpoints, edit file default.xml.
- Gunakan skrip Cloud Shell berikut untuk mengonfirmasi bahwa runtime Apigee telah diinstal sepenuhnya:
export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ENV_NAME}" ]] || break; echo -n "."; sleep 5; done; echo "***ORG IS READY TO USE***";
Saat skrip menampilkan ORG IS READY TO USE, Anda dapat melanjutkan ke langkah berikutnya.
Catatan:
Jika Anda sedang menunggu penginstalan runtime, Anda dapat membaca dan merencanakan pengembangan untuk Tugas 2.
- Simpan dan deploy proxy translate-v1 ke lingkungan eval menggunakan akun layanan berikut:
apigee-proxy@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
- Uji proxy API.
Lingkungan eval di organisasi Apigee dapat dipanggil menggunakan nama host eval.example.com. Entri DNS ini hanya tersedia di jaringan internal, jadi Anda harus menggunakan VM yang telah dibuat untuk Anda.
- Di Cloud Shell, buka koneksi SSH ke apigeex-test-vm:
TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)")
gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
-
Jika diminta untuk memberikan otorisasi, klik Authorize. Untuk setiap pertanyaan yang diajukan dalam perintah gcloud, klik Enter atau Return untuk menentukan input default.
-
Setelah Anda berhasil menyelesaikan Tugas 1, perintah curl berikut akan menerjemahkan teks:
curl -i -k -X POST "https://eval.example.com/translate/v1" -H "Content-Type: application/json" -d '{ "q": "Translate this text!", "target": "es" }'
Responsnya akan terlihat seperti ini:
{
"data": {
"translations": [
{
"translatedText": "¡Traduce este texto!",
"detectedSourceLanguage": "en"
}
]
}
}
Catatan:
Selama beberapa menit, Anda mungkin menerima respons error 502 hingga proxy API di-deploy sepenuhnya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat proxy Cloud Translation API
Catatan:
Jika tanda centang hijau tidak ditampilkan, klik menu skor di kanan atas, lalu klik Periksa progres saya pada langkah yang relevan. Kotak pop-up akan memberi Anda saran.
Tugas 2. Mengubah permintaan dan respons API
Cymbal Shops ingin membuat API yang berbeda dari antarmuka yang disediakan oleh Translation API. Ada dua panggilan Translation API yang harus diubah.
Panggilan pertama mengambil daftar bahasa yang valid.
Permintaan Cloud Translation API:
REQUEST:
POST https://translation.googleapis.com/language/translate/v2/languages
Authorization: Bearer ACCESSTOKEN
Content-Type: application/json
{
"target": "en"
}
Respons Cloud Translation API:
Content-Type: application/json
{
"data": {
"languages": [
{
"language": "af",
"name": "Afrikaans"
},
{
"language": "sq",
"name": "Albanian"
},
...
]
}
}
Permintaan translate-v1:
GET https://eval.example.com/translate/v1/languages
Respons translate-v1:
Content-Type: application/json
[{"language":"af","name":"Afrikaans"},{"language":"sq","name":"Albanian"}, ... ]
Proxy API harus mengganti GET dengan POST, menghapus kolom respons data dan languages, serta mendapatkan kode bahasa target dari set properti. Token akses ditambahkan secara otomatis oleh bagian Authentication di Tugas 1.
Panggilan kedua menerjemahkan teks ke bahasa yang ditentukan.
Permintaan Cloud Translation API:
POST https://translation.googleapis.com/language/translate/v2
Authorization: Bearer ACCESSTOKEN
Content-Type: application/json
{
"q": "Hello world!",
"target": "de"
}
Respons Cloud Translation API:
Content-Type: application/json
{
"data": {
"translations": [
{
"translatedText": "Hallo Welt!",
"detectedSourceLanguage": "en"
}
]
}
}
Permintaan translate-v1:
POST https://eval.example.com/translate/v1?lang=de
Content-Type: application/json
{
"text": "Hello world!"
}
Respons translate-v1:
Content-Type: application/json
{
"translated": "Hallo Welt!"
}
Proxy API harus mengambil bahasa target dari parameter kueri lang, dan mengubah nama kolom untuk teks yang masuk dan diterjemahkan. Parameter kueri lang dapat dihilangkan secara opsional dari permintaan translate-v1, yang dalam hal itu, bahasa target akan diambil dari properti dalam set properti.
Catatan:
Translation API menerima satu string atau array string untuk kolom 'q'. API Anda hanya boleh mendukung satu string.
Persyaratan:
-
Di dalam proxy API, buat set properti bernama language.properties. Set properti harus memiliki dua properti: output dengan nilai es, dan caller dengan nilai en. Properti caller akan digunakan untuk menentukan bahasa target saat menampilkan daftar bahasa (bahasa yang digunakan untuk kolom name). output akan menentukan bahasa target default yang akan digunakan jika parameter kueri lang tidak diberikan.
-
Di endpoint proxy, buat alur bersyarat jalur dan kata kerja untuk resource POST /. Beri nama translate.
-
Di endpoint proxy, buat alur bersyarat jalur (tanpa kata kerja) untuk resource /languages. Beri nama getLanguages. (Jangan sertakan kata kerja. Anda akan mengubah kata kerja permintaan dari GET (untuk input ke proxy) menjadi POST (diperlukan oleh backend). Jika Anda menyertakan kata kerja di dalam kondisi, kebijakan respons dalam alur tidak akan dieksekusi karena request.verb tidak lagi sama dengan GET.)
-
Buat kebijakan AssignMessage bernama AM-BuildTranslateRequest untuk membuat permintaan backend yang digunakan dalam alur bersyarat translate.
Kebijakan harus mencakup:
-
AssignVariable dengan template untuk membuat variabel yang akan digunakan nanti dalam pesan yang dicatat. Variabel bernama text harus menggunakan fungsi template pesan jsonPath untuk mengekstrak kolom text dari permintaan.
-
Variabel bernama language harus dibuat menggunakan fungsi template pesan firstnonnull. Variabel ini harus berisi nilai parameter kueri lang jika ada, dan properti output pada set properti bahasa untuk bahasa target jika parameter kueri lang belum ditentukan.
-
Bagian Set harus digunakan untuk menetapkan payload JSON yang diperlukan oleh layanan backend. Kedua variabel yang telah Anda buat akan digunakan dalam payload.
-
Elemen [AssignTo] harus menggunakan pesan permintaan yang ada.
Bagian AssignVariable dalam kebijakan AssignMessage akan terlihat serupa dengan ini:
<AssignVariable>
<Name>...</Name>
<Template>...</Template>
<AssignVariable>
- Buat kebijakan AssignMessage bernama
AM-BuildTranslateResponse di bawah alur bersyarat translate untuk membuat respons bagi pemanggil menggunakan respons Translation API.
Kebijakan harus mencakup:
-
AssignVariable dengan template jsonPath untuk membuat variabel bernama translated, yang mengekstrak kolom translatedText dari respons Translation API. Petunjuk: ekspresi JSONPath untuk mengekstrak kolom ini adalah $.data.translations[0].translatedText.
-
Tetapkan createNew ke true.
-
Payload JSON baru akan menggunakan variabel translated.
Bagian AssignVariable dalam kebijakan AssignMessage akan terlihat serupa dengan ini:
<AssignVariable>
<Name>...</Name>
<Template>...</Template>
<AssignVariable>
- Buat kebijakan AssignMessage bernama
AM-BuildLanguagesRequest untuk membuat permintaan backend yang digunakan dalam alur bersyarat getLanguages.
Kebijakan harus mencakup:
-
Gunakan Set untuk menetapkan kata kerja dan payload yang benar untuk permintaan backend.
-
Properti caller di dalam set properti language harus digunakan untuk kolom target dalam payload backend.
-
Tetapkan createNew ke true.
-
Tetapkan payload permintaan backend agar memiliki jenis konten application/json.
Bagian AssignVariable dalam kebijakan AssignMessage akan terlihat serupa dengan ini:
<AssignVariable>
<Name>...</Name>
<Set>
...
</Set>
</AssignVariable>
- Buat kebijakan JavaScript bernama
JS-BuildLanguagesResponse di bagian alur bersyarat getLanguages untuk membuat respons bagi pemanggil. Kode JavaScript harus menggunakan langkah-langkah berikut:
- Gunakan context.getVariable untuk mengambil variabel
response.content.
- Gunakan JSON.parse untuk mengonversi JSON response.content menjadi objek.
- Gunakan JSON.stringify untuk mengonversi kolom data.languages dalam objek menjadi JSON.
- Gunakan context.setVariable untuk mengganti
response.content dengan JSON dari langkah 3.
Kode JavaScript Anda akan terlihat seperti ini:
var payload = ...;
var payloadObj = JSON.parse(...);
var newPayload = JSON.stringify(...);
context.setVariable(...);
Catatan:
Pastikan untuk membuat kebijakan yang diinginkan dalam alur bersyarat yang benar dan mengedit konfigurasi kebijakan yang diinginkan dalam file .xml masing-masing.
- Uji API. Dari virtual machine apigeex-test-vm, gunakan perintah curl berikut untuk menguji contoh yang ditunjukkan di atas:
Klik Periksa progres saya untuk memverifikasi tujuan.
Mengubah permintaan dan respons API
Catatan:
Jika tanda centang hijau tidak ditampilkan, klik menu skor di kanan atas, lalu klik Periksa progres saya pada langkah yang relevan. Kotak pop-up akan memberi Anda saran.
Tugas 3. Menambahkan verifikasi kunci API dan penerapan kuota
Akses ke API ini harus dibatasi pada aplikasi yang disetujui, jadi Anda akan menambahkan kebijakan kunci VerifyAPI, serta kebijakan Quota untuk membatasi jumlah permintaan.
Persyaratan:
-
Buat produk API dengan nama dan nama tampilan translate-product. Produk API ini harus memiliki akses publik, secara otomatis menyetujui permintaan akses, dan tersedia di lingkungan eval.
-
Tambahkan operasi ke produk API translate-product. Operasi harus mengizinkan akses ke proxy translate-v1 dan menggunakan jalur /, yang mengizinkan akses ke permintaan apa pun, termasuk /. Metode yang diizinkan adalah GET dan POST. Tambahkan setelan kuota operasi 10 permintaan per 1 menit.
-
Buat developer dengan email joe@example.com. Pilih nama depan, nama belakang, dan nama pengguna Anda sendiri.
-
Buat aplikasi bernama translate-app, dan aktifkan produk API translate-product untuk aplikasi tersebut. Anda harus mengaitkannya dengan developer joe@example.com Anda.
-
Tambahkan kebijakan VerifyAPIKey bernama VA-VerifyKey ke preflow endpoint proxy. Kunci API harus diperlukan untuk setiap permintaan, dan harus dikirim menggunakan header Key.
-
Tambahkan kebijakan Quota bernama Q-EnforceQuota ke preflow endpoint proxy.
Kebijakan harus mencakup langkah-langkah:
- Gunakan jenis
kalender. Jenis kalender memerlukan elemen StartTime.
- Tentukan
UseQuotaConfigInAPIProduct untuk menggunakan kuota dari produk API, dengan kuota default 5 permintaan tiap satu jam jika produk API tidak menentukan setelan kuota.
- Tetapkan Distributed dan Synchronous ke true, lalu hapus elemen AsynchronousConfiguration.
Setelah perubahan ini dilakukan, permintaan akan menampilkan error jika kunci API yang valid tidak ditentukan di header Key.
- Dari virtual machine apigeex-test-vm, gunakan perintah curl berikut untuk menguji fungsi kunci API:
Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan verifikasi kunci API dan penerapan kuota
Catatan:
Jika tanda centang hijau tidak ditampilkan, klik menu skor di kanan atas, lalu klik Periksa progres saya pada langkah yang relevan. Kotak pop-up akan memberi Anda saran.
Tugas 4. Menambahkan logging pesan
Untuk memahami cara penggunaan layanan terjemahan, kebijakan MessageLogging akan mencatat setiap pesan yang diterjemahkan.
Persyaratan:
- Tambahkan kebijakan MessageLogging bernama
ML-LogTranslation ke alur bersyarat translate. Kebijakan harus dijalankan setelah langkah AM-BuildTranslateResponse.
Catatan:
Jangan tambahkan ke PostClientFlow karena log hanya dibuat untuk operasi terjemahan.
- Kebijakan harus mencatat log ke Cloud Logging. Gunakan dokumentasi kebijakan ini.
Pesan ini memerlukan variabel language, text, dan translated yang dibuat dalam kebijakan AM-BuildTranslateRequest dan AM-BuildTranslateResponse.
-
Validasikan pesan yang dicatat di halaman Logging di Konsol Google Cloud. Gunakan kueri logName : "translate" untuk melihat hanya log terjemahan.
-
Setelah kebijakan MessageLogging berhasil ditambahkan, gunakan perintah curl berikut:
curl -i -k -X POST "https://eval.example.com/translate/v1?lang=de" -H "Content-Type:application/json" -H "Key: $KEY" -d '{ "text": "Hello world!" }'
Catatan:
Ada sedikit jeda sebelum pesan yang dicatat muncul di log.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan logging pesan
Catatan:
Jika tanda centang hijau tidak ditampilkan, klik menu skor di kanan atas, lalu klik Periksa progres saya pada langkah yang relevan. Kotak pop-up akan memberi Anda saran.
Tugas 5. Menulis ulang pesan error backend
Jika parameter target yang dikirim ke Translation API tidak valid, pesan error 400 Bad Request akan ditampilkan:
{
"error": {
"code": 400,
"message": "Invalid Value",
"errors": [
{
"message": "Invalid Value",
"domain": "global",
"reason": "invalid"
}
]
}
}
Pesan error ini akan membingungkan pemanggil, jadi Anda akan menulis ulang pesan error tersebut.
Persyaratan:
- Tambahkan bagian FaultRules ke endpoint target default. Saat backend menampilkan respons 400, backend akan otomatis mengevaluasi aturan kesalahan yang cocok di endpoint target.
Catatan:
Menu UI Navigator di sebelah kiri tidak dapat digunakan untuk menambahkan bagian FaultRules. Anda harus menambahkannya dalam konfigurasi XML endpoint target.
-
Tambahkan sebuah FaultRule ke bagian FaultRules. Kondisi FaultRule ini harus ditetapkan agar bisa dijalankan jika fault.name adalah ErrorResponseCode.
-
Buat kebijakan AssignMessage bernama AM-BuildErrorResponse dan hubungkan ke FaultRule. Gunakan konfigurasi kebijakan berikut:
<AssignMessage name="AM-BuildErrorResponse">
<Set>
<Payload contentType="application/json">{ "error": "Invalid request. Verify the lang query parameter." }</Payload>
</Set>
</AssignMessage>
Setelah kebijakan dihubungkan, bagian FaultRules di endpoint target Anda akan terlihat seperti ini:
<FaultRules>
<FaultRule name="...">
<Step>
<Name>...</Name>
</Step>
<Condition>...</Condition>
</FaultRule>
</FaultRules>
Catatan:
Anda harus mengedit XML Endpoint Target secara manual (pastikan yang Anda edit adalah TargetEndpoint, bukan ProxyEndpoint).
- Uji API.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menulis ulang pesan error backend
Catatan:
Jika tanda centang hijau tidak ditampilkan, klik menu skor di kanan atas, lalu klik Periksa progres saya pada langkah yang relevan. Kotak pop-up akan memberi Anda saran.
Selamat!
Selama kursus di Challenge Lab ini, Anda telah menunjukkan pengetahuan tentang pengembangan dan keamanan API Apigee X.

Mendapatkan badge keahlian Anda berikutnya
Lab mandiri ini merupakan bagian dari quest Mengembangkan dan Mengamankan API dengan Apigee X. Dengan menyelesaikan Quest badge keahlian ini, Anda akan mendapatkan badge di atas sebagai pengakuan atas pencapaian Anda. Tampilkan badge di resume atau platform media sosial Anda, dan umumkan pencapaian Anda menggunakan hashtag #GoogleCloudBadge.
Quest badge keahlian ini merupakan bagian dari alur pembelajaran Developer API Google Cloud. Lanjutkan proses pembelajaran Anda dengan mendaftarkan diri dalam quest Men-deploy dan Mengelola Apigee X.
Sertifikasi dan pelatihan Google Cloud
...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 10 Juli 2024
Lab Terakhir Diuji pada 10 Juli 2024
Hak cipta 2025 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.