Membagikan kredensial di seluruh permintaan API akan meningkatkan performa dan menghindari overhead berlebihan yang dapat mengakibatkan error pembatasan kapasitas. Panduan ini menjelaskan cara mengoptimalkan pengelolaan kredensial OAuth2 agar aplikasi Anda dapat berinteraksi secara efisien dengan Google Ads API.
Strategi berbagi kredensial Anda akan bergantung pada apakah aplikasi Anda multithread atau multiproses (atau terdistribusi). Aplikasi yang multiproses dan multi-thread dalam setiap proses harus menerapkan kedua strategi tersebut. Strategi ini juga dapat disesuaikan untuk beberapa akun Google Ads.
Multi-thread
Setiap sesi atau pengguna yang digambar oleh thread harus menggunakan objek kredensial yang sama. Pembaruan token akses juga harus dilakukan secara sinkron untuk menghindari kondisi race.
Library klien kami memastikan bahwa kredensial adalah objek yang aman untuk thread yang
diperbarui secara sinkron saat token aksesnya berakhir. Setiap library
klien memiliki objek sesi (atau pengguna) dengan kredensial yang digunakan kembali
sepanjang masa aktifnya. Untuk membagikan kredensial antar-thread, Anda cukup
membuat setiap sesi menggunakan kredensial yang sama. Misalnya, di library klien Java, Anda perlu membuat singleton Credential
dan membagikannya ke semua sesi.
Multiproses atau terdistribusi
Untuk proses multiproses atau terdistribusi, Anda perlu mempertahankan kredensial sebelum dapat membagikannya. Untuk memastikan beberapa proses atau server tidak mencoba me-refresh kredensial secara bersamaan, sehingga menyebabkan permintaan refresh yang berlebihan, Anda harus menetapkan refresh ke satu proses.
Misalnya, tugas atau layanan terpisah dapat bertanggung jawab untuk memperbarui kredensial secara berkala dan secara proaktif mengirimkannya ke penyimpanan data yang digunakan bersama oleh kumpulan server. Selanjutnya, setiap server dapat mengambil kredensial dari penyimpanan data saat membuat permintaan API.
Muat ulang tugas
Tugas refresh tidak boleh menunggu hingga kredensial saat ini habis masa berlakunya sebelum memulai refresh. Tindakan tersebut dapat menyebabkan aplikasi berhenti berfungsi karena tidak memiliki kredensial yang valid. Namun, jika token akses kredensial habis masa berlakunya saat permintaan API sedang diproses, permintaan akan tetap selesai, dan hasilnya akan ditampilkan.
Sebaiknya pantau waktu saat token akses Anda terakhir diperbarui, dan paksa refresh jika ada waktu kurang dari 5 menit hingga masa berlakunya habis.
Jika tidak mengetahui kapan token akses terakhir direfresh, Anda dapat mencoba me-refresh token tersebut dengan asumsi token tersebut sudah habis masa berlakunya. Jika token akses tidak hampir habis, server akan menampilkan token akses yang sama, beserta jumlah milidetik yang tersisa hingga masa berlaku token habis.
Penyimpanan data
Anda dapat menggunakan penyimpanan data yang ada atau men-deploy penyimpanan data khusus untuk berbagi kredensial antar-server. Solusinya mencakup server cache, seperti Memcached, Infinispan, atau penyimpanan data NoSQL, seperti MongoDB.
Penyimpanan data harus dioptimalkan untuk operasi pembacaan cepat karena akan ada lebih banyak permintaan baca daripada penulisan. Selain itu, kredensial harus disimpan dengan aman.
Saat menyimpan kredensial, Anda harus menyimpan expiry_time
yang dihitung (sekarang + expires_in
) dan refresh_token
bersama access_token
. expiry_time
dihitung sebagai waktu permintaan refresh access_token
ditambah waktu expires_in
.
Kumpulan server
Setiap server atau proses dalam kumpulan mengambil kredensial terbaru dari penyimpanan data sebelum membuat permintaan. Selama tugas refresh berjalan dengan benar, kredensial akan valid. Namun, jika tugas refresh atau penyimpanan data gagal, Anda harus memiliki mekanisme penggantian.
Jika server atau proses tidak bisa mendapatkan kredensial dari penyimpanan data, atau jika masa berlaku kredensial berakhir, server harus memuat ulang kredensialnya sendiri agar aplikasi dapat terus menggunakan API hingga masalah teratasi.
Pengelolaan kredensial untuk beberapa akun
Kredensial yang dibuat untuk akun pengelola Google Ads dapat digunakan untuk mengakses semua akun turunannya. Jadi, bagi pengguna dengan satu hierarki akun pengelola, biasanya cukup membuat kredensial untuk akun pengelola tingkat teratas yang akan digunakan untuk semua akun Google Ads di bawahnya.
Jika aplikasi Anda perlu mengakses akun Google Ads yang tidak terkait satu sama lain dalam hierarki akun pengelola apa pun, Anda harus membuat dan mengelola kredensial yang berbeda untuk akun yang berbeda, seperti untuk setiap akun klien Google Ads yang Anda akses, atau setiap akun pengelola tingkat teratas dalam hierarki independen yang Anda akses.
Anda dapat mengikuti strategi yang sama untuk aplikasi multithread atau
multiproses / distribusi dengan sedikit modifikasi. Saat
menggunakan penyimpanan data bersama, kredensial harus diindeks oleh ID akun
customerId
untuk memastikan kredensial dikaitkan dengan akun yang benar.
Selain itu, tugas refresh harus selalu memperbarui semua kredensial. Jika akun
baru ditautkan, tugas pemuatan ulang mungkin perlu dipicu.
Terakhir, dalam aplikasi multi-thread, Anda hanya boleh membagikan objek kredensial ke seluruh thread yang beroperasi di akun yang terkait dengan objek kredensial.