Bangun API cerdas untuk memprediksi kecenderungan pelanggan untuk membeli menggunakan Apigee, BigQuery ML, dan Spanner

Last reviewed 2023-06-20 UTC

Dokumen ini menjelaskan cara Anda membangun arsitektur yang dijelaskan dalam Smart API untuk memprediksi kecenderungan pelanggan untuk membeli menggunakan Apigee, BigQuery ML, dan Spanner. Dalam arsitektur tersebut, Anda menggunakan produk ini untuk men-deploy API yang dapat memprediksi seberapa besar kemungkinan pelanggan akan melakukan pembelian.

Petunjuk ini ditujukan bagi developer API dan data spesialis yang ingin menghasilkan lebih banyak pendapatan melalui platform omni-channel dan e-commerce dengan memberikan pengalaman yang lebih dipersonalisasi kepada pengguna. Anda dianggap sudah memahami Apigee, BigQuery ML, Spanner, Google Cloud CLI, dan Apache Maven.

Arsitektur

Diagram berikut menunjukkan arsitektur dan proses yang digunakan dalam solusi ini:

Arsitektur API untuk memprediksi kecenderungan pelanggan untuk membeli.

Untuk mengetahui detailnya, lihat Smart API untuk memprediksi kecenderungan pelanggan untuk membeli menggunakan Apigee, BigQuery ML, dan Spanner.

Tujuan

  • Membuat set data kecenderungan pembelian pelanggan di BigQuery.
  • Mengimpor data katalog produk ke database Spanner.
  • Impor dan deploy proxy API Apigee.
  • Integrasikan data kecenderungan pembelian pelanggan dari BigQuery dengan katalog produk dan informasi harga dari database Spanner.
  • Buat tampilan gabungan dari rekomendasi produk.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Slot Fleksibel BigQuery dan BigQuery ML
  • Spanner
  • Apigee

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the AI Platform Training & Prediction, BigQuery, BigQuery Reservation, BigQuery Storage, Cloud Spanner, Cloud Storage, Cloud Storage API, Dataflow, Google Cloud, Cloud Storage JSON, Service Management, Service Usage APIs.

    Enable the APIs

  4. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  5. Berikan peran ke Akun Google Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:

    • roles/apigee.admin
    • roles/bigquery.user
    • roles/bigquery.dataViewer
    • roles/spanner.admin
    • roles/spanner.databaseAdmin
    • roles/resourcemanager.projectIamAdmin
    • roles/serviceusage.serviceUsageConsumer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ganti PROJECT_ID dengan project ID Anda.
    • Ganti EMAIL_ADDRESS dengan alamat email Anda.
    • Ganti ROLE dengan setiap peran individual.
  6. Jika Anda belum memiliki akun Apigee, siapkan Apigee untuk menyediakan instance Apigee. Penyediaan dapat memerlukan waktu hingga satu jam.
  7. Konfigurasikan organisasi Apigee Anda untuk mengizinkan akses eksternal.

Jika Anda menyelesaikan prosedur ini dan memutuskan untuk tidak mempertahankan deployment, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Membuat set data rekomendasi e-commerce menggunakan BigQuery ML

Di bagian ini, Anda akan menggunakan kueri SQL standar di ML BigQuery untuk membuat model ML, melatihnya pada data pelanggan di BigQuery, lalu men-deploy-nya.

Data pelanggan yang Anda gunakan berasal dari set data Contoh Google Analytics, yang dihosting secara publik di BigQuery. Set data ini menyediakan 12 bulan (Agustus 2016 hingga Agustus 2017) data Analytics 360 yang di-obfuscate dari Google Merchandise Store, sebuah toko e-commerce sungguhan yang menjual merchandise bermerek Google.

Anda tidak perlu mengekspor data atau membangun pipeline deployment dan pelatihan model. BigQuery melakukan penskalaan otomatis untuk menangani resource komputasi apa pun yang Anda butuhkan.

Model ML yang Anda buat untuk solusi ini menggunakan faktorisasi matriks, yaitu metode umum dan efektif untuk membuat sistem rekomendasi berdasarkan data preferensi pengguna.

Memproses data sampel

Saat menggunakan faktorisasi matriks, Anda mengevaluasi masukan pengguna yang eksplisit atau implisit untuk menentukan preferensi pelanggan. Untuk menggunakan masukan eksplisit, set data harus berisi data tentang preferensi produk pengguna, seperti rating bintang antara 1 dan 5. Jika tidak ada masukan eksplisit yang tersedia, Anda harus menggunakan metrik perilaku lainnya untuk menyimpulkan preferensi pelanggan, seperti melihat total waktu yang dihabiskan pengguna di halaman detail produk. Solusi ini menggunakan data durasi sesi untuk menyimpulkan preferensi pelanggan.

Untuk melatih model faktorisasi matriks, Anda memerlukan tabel dengan kolom yang mengidentifikasi pelanggan, item yang diberi rating, dan rating implisit. Di bagian ini, Anda akan membuat tabel tersebut dengan kolom userid, itemId, dan session_duration. Kolom session_duration berisi durasi sesi pengguna di halaman produk item tertentu.

Untuk membuat tabel menggunakan data dari set data Contoh Analytics, lakukan tindakan berikut:

  1. Di Google Cloud Marketplace, buka halaman Contoh Analytics.

    Buka Contoh Analytics

  2. Klik View Dataset. Halaman ruang kerja SQL BigQuery akan terbuka dengan set data Contoh Analytics dipilih.

  3. Di bagian Explorer, di samping project Anda, klik View actions, lalu klik Create dataset.

  4. Pada dialog Create dataset yang muncul, lakukan hal berikut:

    1. Di kolom Dataset ID, masukkan bqml.
    2. Dalam daftar Data location, pilih us (multiple domains in United States).
    3. Klik Buat set data.
  5. Klik Go to dataset, lalu klik Compose New Query.

  6. Di Query Editor, buat tabel yang berisi data pelatihan dengan menjalankan pernyataan SQL berikut:

    CREATE OR REPLACE TABLE bqml.aggregate_web_stats AS (
      WITH
        durations AS (
          --calculate pageview durations
          SELECT
            CONCAT(fullVisitorId,'-',
                 CAST(visitNumber AS STRING),'-',
                 CAST(hitNumber AS STRING) ) AS visitorId_session_hit,
            LEAD(time, 1) OVER (
              PARTITION BY CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING))
              ORDER BY
              time ASC ) - time AS pageview_duration
          FROM
            `bigquery-public-data.google_analytics_sample.ga_sessions_2017*`,
            UNNEST(hits) AS hit
        ),
        prodview_durations AS (
          --filter for product detail pages only
         SELECT
            CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING)) AS userId,
            productSKU AS itemId,
            IFNULL(dur.pageview_duration,
             1) AS pageview_duration,
          FROM
            `bigquery-public-data.google_analytics_sample.ga_sessions_2017*` t,
            UNNEST(hits) AS hits,
            UNNEST(hits.product) AS hits_product
          JOIN
            durations dur
          ON
            CONCAT(fullVisitorId,'-',
                   CAST(visitNumber AS STRING),'-',
                   CAST(hitNumber AS STRING)) = dur.visitorId_session_hit
          WHERE
          eCommerceAction.action_type = "2"
        ),
        aggregate_web_stats AS(
          --sum pageview durations by userId, itemId
          SELECT
            userId,
            itemId,
            SUM(pageview_duration) AS session_duration
          FROM
            prodview_durations
          GROUP BY
            userId,
            itemId )
        SELECT
        *
       FROM
          aggregate_web_stats
    );
    

    Tabel bqml.aggregate_web_stats dibuat dan diisi dengan data pelatihan.

  7. Untuk melihat contoh data, di Query Editor, jalankan pernyataan SQL berikut:

    SELECT
    *
    FROM
      bqml.aggregate_web_stats
    LIMIT
      10;
    

Output tersebut akan menampilkan tabel yang memiliki satu baris untuk setiap User-ID yang menyertakan ID item yang dilihat pengguna, dan durasi sesinya. Outputnya mirip dengan yang berikut ini:

Baris userId itemId session_duration
1 6703373209489429228-1 GGOEAXXX0808 19523
2 868731560082458910-1 GGOEAXXX0808 8312
3 4805474958539278422-1 GGOEAXXX0808 62892
4 8353360074725418910-3 GGOEAXXX0808 4883
5 8253742246691621007-2 GGOEAXXX0808 10
6 7211254729136975568-1 GGOEAXXX0808 96090
7 66777488032155805-1 GGOEAXXX0808 3893
8 0804312527321649470-1 GGOEAXXX0808 7539
9 2965429397557124425-1 GGOEAXXX0808 21776
10 8459600677575627508-1 GGOEAXXX0808 6265

Membeli slot fleksibel

Jika Anda menggunakan harga on demand untuk BigQuery, agar dapat melatih model faktorisasi matriks, Anda harus membeli slot fleksibel, lalu membuat reservasi dan penetapan untuk BigQuery. Jika menggunakan harga tetap dengan BigQuery, Anda dapat melewati bagian ini dan membuka Membuat, melatih, dan men-deploy model.

Untuk membeli slot fleksibel, Anda harus memiliki peran IAM yang menyertakan izin bigquery.reservations.create. Izin ini diberikan kepada project owner, dan disertakan dalam peran IAM Admin BigQuery (roles/bigquery.admin) dan BigQuery Resource Admin (roles/bigquery.resourceAdmin).

  1. Di konsol Google Cloud, buka halaman BigQuery:

    Buka BigQuery

  2. Klik Pengelolaan kapasitas, lalu klik Reservasi.

  3. Jika Anda dialihkan ke halaman BigQuery Reservasi API untuk mengaktifkan API, klik Enable. Jika tidak, lanjutkan ke langkah berikutnya.

  4. Di tab Reservasi, klik Beli Slot.

  5. Di halaman Beli Slot, lakukan tindakan berikut:

    1. Dalam daftar Durasi komitmen, pilih Flex.
    2. Dalam daftar Location, pilih us (multiple domains in United States)
    3. Dalam daftar Jumlah slot, pilih 500.
    4. Klik Next.
    5. Di kolom Konfirmasi pembelian, ketik CONFIRM, lalu klik Pembelian.

  6. Klik Lihat Komitmen Slot.

    Tunggu hingga 20 menit hingga kapasitas disediakan. Setelah kapasitas disediakan, kolom Status komitmen slot akan menampilkan .

  7. Klik Buat Reservasi, lalu tetapkan opsi berikut:

    1. Di Nama reservasi, masukkan model.
    2. Dalam daftar Location, pilih us (multiple domains in United States)
    3. Pada Jumlah slot, masukkan 500.
    4. Klik Simpan. Tindakan ini akan mengembalikan Anda ke halaman Reservations.
  8. Di samping reservasi model, di kolom Tindakan, pilih Buat Tugas.

  9. Di bagian Select an organization, folder, or project, klik Browse.

  10. Masukkan nama project yang Anda gunakan untuk solusi ini, atau pilih dari daftar.

  11. Klik Pilih, lalu klik Buat.

Membuat, melatih, dan men-deploy model

Untuk membuat, melatih, dan men-deploy model faktorisasi matriks, lakukan hal berikut:

  1. Di halaman BigQuery Konsol Google Cloud, klik Compose new query.
  2. Jalankan pernyataan SQL CREATE MODEL:

    CREATE OR REPLACE MODEL bqml.retail_recommender`
      OPTIONS(model_type='matrix_factorization',
            user_col='userId',
            item_col='itemId',
            rating_col='session_duration',
            feedback_type='implicit'
            )
      AS
      SELECT * FROM bqml.aggregate_web_stats;
    

Setelah pelatihan selesai, model yang dilatih akan di-deploy sebagai model bqml.retail_recommender.

Menggunakan model terlatih untuk membuat prediksi

Di bagian ini, untuk mendapatkan prediksi dari model bqml.retail_recommender yang di-deploy, Anda menggunakan fungsi SQL ML.RECOMMEND.

  1. Pada halaman BigQuery konsol Google Cloud, buat kueri dan dapatkan prediksi yang mewakili 5 rekomendasi teratas untuk userId yang ditentukan:

    DECLARE MY_USERID STRING DEFAULT "0824461277962362623-1";
    
    SELECT
     *
    FROM
      ML.RECOMMEND(MODEL `bqml.retail_recommender`,
      (SELECT MY_USERID as userID)
                  )
    ORDER BY predicted_session_duration_confidence DESC
    LIMIT 5;
    

    Output-nya menampilkan baris untuk keyakinan durasi sesi yang diprediksi (lebih tinggi lebih baik), ID pengguna terkait, dan ID item yang dilihat pengguna. Outputnya mirip dengan yang berikut ini:

    Baris predicted_session_duration_confidence userId itemId
    1 29011.10454702254 0824461277962362623-1 GGOEGAAX0574
    2 28212.99840462358 0824461277962362623-1 GGOEGDHQ015399
    3 28126.79442866013 0824461277962362623-1 GGOEGETR014599
    4 27303.60852083874 0824461277962362623-1 GGOEGAAX0338
    5 25692.370609851147 0824461277962362623-1 GGOEGEFR024199
  2. Untuk mendapatkan 5 prediksi teratas bagi semua pengguna, jalankan pernyataan SQL berikut. Pernyataan tersebut menghasilkan banyak baris, sehingga output ditulis ke tabel, kemudian sepuluh data pertama diambil sehingga Anda dapat melihat contoh data.

    -- Create output table of top 5 predictions
    CREATE OR REPLACE TABLE bqml.prod_recommendations AS (
    WITH predictions AS (
        SELECT
          userId,
          ARRAY_AGG(STRUCT(itemId,
                           predicted_session_duration_confidence)
                    ORDER BY
                      predicted_session_duration_confidence DESC
                    LIMIT 5) as recommended
        FROM ML.RECOMMEND(MODEL bqml.retail_recommender)
        GROUP BY userId
    )
    SELECT
      userId,
      itemId,
      predicted_session_duration_confidence
    FROM
      predictions p,
      UNNEST(recommended)
    );
    -- Show table
    SELECT
    *
    FROM
      bqml.prod_recommendations
    ORDER BY
      userId
    LIMIT
      10;
    

    Output-nya menampilkan beberapa ID pengguna, ID item yang dilihat pengguna, dan keyakinan durasi sesi yang diprediksi. Outputnya mirip dengan hal berikut ini:

    Baris userId itemId predicted_session_duration_confidence
    1 000170187170673177-6 GGOEGDHQ015399 15931.156936770309
    2 000170187170673177-6 GGOEGAAX0574 20178.608474922632
    3 000170187170673177-6 GGOEGAAX0338 20247.337545389437
    4 000170187170673177-6 GGOEGETR014599 15524.355852692066
    5 000170187170673177-6 GGOEGEFR024199 16443.307099088597
    6 000338059556124978-1 GGOEGAAX0338 18143.067737280064
    7 000338059556124978-1 GGOEGAAX0279 16531.718889063464
    8 000338059556124978-1 GGOEGAAX0574 20916.672241880347
    9 000338059556124978-1 GGOEGETR014599 16155.674211782945
    10 000338059556124978-1 GGOEGEFR024199 18417.17554202264

Menyiapkan data Spanner

Di bagian berikut ini, Anda akan menggunakan gcloud CLI dan Maven. Anda dapat menjalankan perintah untuk kedua alat dari Cloud Shell. Tidak diperlukan penginstalan untuk menggunakan alat ini.

  1. Di Cloud Shell, clone repositori GitHut rekomendasi produk yang berisi skrip dan paket proxy API rekomendasi produk untuk menyiapkan data dalam database Spanner:

    git clone https://github.com/apigee/devrel/tree/main/references/product-recommendations
    cd product-recommendations-v1
    
  2. Buat akun layanan datareader dan tetapkan peran IAM ke akun tersebut. Akun layanan digunakan untuk mengakses data di BigQuery dan database Spanner dari proxy API.

    gcloud iam service-accounts create datareader --display-name="Data reader for BigQuery and Spanner Demo"
    gcloud iam service-accounts list | grep datareader
    gcloud iam service-accounts create datareader --display-name="Data reader for Apigee, BigQuery, and Spanner Demo"
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseUser" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseReader" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.dataViewer" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.user" --quiet
    
  3. Menetapkan variabel lingkungan:

    # For Apigee
    export PROJECT_ID=APIGEE_PROJECT
    export ORG=$PROJECT_ID
    export ENV=eval
    export ENVGROUP_HOSTNAME=API_DOMAIN_NAME
    export SA=datareader@$PROJECT_ID.iam.gserviceaccount.com
    
    # For Cloud Spanner
    export SPANNER_INSTANCE=product-catalog
    export SPANNER_DATABASE=product-catalog-v1
    export REGION=regional-us-east1
    

    Ganti kode berikut:

    • APIGEE_PROJECT: nama project Apigee Anda.
    • API_DOMAIN_NAME: nama host yang dikonfigurasi di halaman Admin > Lingkungan > Grup di UI Apigee.
  4. Di halaman BigQuery Konsol Google Cloud, pilih tabel prod_recommendations, lalu klik tab Preview untuk melihat hasilnya.

    1. Salin nilai userId apa pun.
    2. Di Cloud Shell, tetapkan variabel lingkungan:

      export CUSTOMER_USERID=USER_ID
      

      Ganti USER_ID dengan nilai userId yang Anda salin di langkah sebelumnya.

  5. Di Cloud Shell, tampilkan hasil rekomendasi produk yang diurutkan untuk nilai CUSTOMER_USERID yang ditentukan:

    bq query --nouse_legacy_sql \
        "SELECT * FROM \`$PROJECT_ID.bqml.prod_recommendations\` AS A where A.userid = \"$CUSTOMER_USERID\"" \
        ORDER BY A.predicted_session_duration_confidence DESC
    

    Output menampilkan ID pengguna individual, ID item yang dilihat pengguna, dan keyakinan durasi sesi yang diprediksi. Outputnya mirip dengan hal berikut ini:

    +-----------------------+----------------+--------------------------------------------+
    |        userId         |     itemId     |      predicted_session_duration_confidence |
    +-----------------------+----------------+--------------------------------------------+
    | 6929470170340317899-1 | GGOEGAAX0037   |                          40161.10446942589 |
    | 6929470170340317899-1 | GGOEYDHJ056099 |                          27642.28480729123 |
    | 6929470170340317899-1 | GGOEGAAX0351   |                         27204.111219270915 |
    | 6929470170340317899-1 | GGOEGDWC020199 |                         25863.861349754334 |
    | 6929470170340317899-1 | GGOEGAAX0318   |                         24585.509088154067 |
    +-----------------------+----------------+--------------------------------------------+
    

Membuat database Spanner dan mengimpor data katalog produk

  1. Di Cloud Shell, buat instance Spanner di region yang ditentukan, buat database katalog produk, dan impor data:

    ./setup_spanner.sh
    

    Skrip menggunakan variabel lingkungan CUSTOMER_USERID dan menampilkan entri yang dibuat.

    Katalog produk Spanner hanya berisi item yang digunakan dalam langkah pelatihan BigQuery untuk pengguna tertentu. Oleh karena itu, jika Anda mengubah variabel lingkungan CUSTOMER_USERID setelah membuat data katalog produk di database Spanner, Anda harus menjalankan ulang skrip shell setup_spanner.sh untuk mengisi ulang data.

  2. Verifikasi data di database Spanner:

    gcloud spanner databases execute-sql $SPANNER_DATABASE --sql='SELECT * FROM products'
    

    Output menampilkan ID produk dan informasi deskriptif dari katalog produk Spanner, termasuk harga dan jalur gambar. Outputnya mirip dengan hal berikut ini:

    productid       name                description                price  discount  image
    GGOEGAAX0037    Aviator Sunglasses  The ultimate sunglasses    42.42  0         products_Images/sunglasses.jpg
    GGOEGAAX0318    Bamboo glass jar    Bamboo glass jar           19.99  0         products_Images/bamboo-glass-jar.jpg
    GGOEGAAX0351    Loafers             Most comfortable loafers   38.99  0         products_Images/loafers.jpg
    GGOEGDWC020199  Hair dryer          Hottest hair dryer         84.99  0         products_Images/hairdryer.jpg
    GGOEYDHJ056099  Coffee Mug          Best Coffee Mug            4.2    0         products_Images/mug.jpg
    

Men-deploy proxy Apigee

Di bagian ini, Anda akan menjalankan perintah Maven untuk membuat resource berikut:

  • Proxy bernama product-recommendations-v1
  • Produk API bernama product-recommendations-v1-$ENV
  • Pengguna developer aplikasi bernama demo@any.com
  • Aplikasi bernama product-recommendations-v1-app-$ENV

Untuk membuat resource, Maven menggunakan file pom.xml dari repositori GitHub. File berisi petunjuk dan langkah penginstalan.

Bagian profil file pom.xml berisi nilai untuk apigee.org, apigee.env, api.northbound.domain, gcp.projectid, googletoken.email, dan api.userid. Nilai ini bervariasi menurut project dan ditetapkan menggunakan command line. Contoh berikut menunjukkan bagian file pom.xml yang berisi nilai:

<profile>
  <id>eval</id>
  <properties>
    <apigee.profile>eval</apigee.profile>
    <apigee.org>${apigeeOrg}</apigee.org>
    <apigee.env>${apigeeEnv}</apigee.env>
    <api.northbound.domain>${envGroupHostname}</api.northbound.domain>
    <gcp.projectid>${gcpProjectId}</gcp.projectid>
<apigee.googletoken.email>${googleTokenEmail}</apigee.googletoken.email>
    <api.userid>${customerUserId}</api.userid>
  </properties>
</profile>

Anda menetapkan nilai ini lebih awal saat menyiapkan data Spanner.

Untuk men-deploy proxy, lakukan hal berikut:

  • Di Cloud Shell, instal proxy dan artefak terkaitnya, lalu uji API:

    mvn -P eval clean install -Dbearer=$(gcloud auth print-access-token) \
        -DapigeeOrg=$ORG \
        -DapigeeEnv=$ENV \
        -DenvGroupHostname=$ENVGROUP_HOSTNAME \
        -DgcpProjectId=$PROJECT_ID \
        -DgoogleTokenEmail=$SA \
        -DcustomerUserId=$CUSTOMER_USERID
    

    Output menunjukkan eksekusi langkah-langkah penginstalan dan hasil panggilan API pengujian integrasi. Ada satu panggilan ke endpoint /openapi dan panggilan lainnya ke endpoint /products. Hasil pengujian memverifikasi bahwa proxy API telah diinstal, di-deploy, dan beroperasi. Output juga menampilkan kredensial aplikasi, yang dapat Anda gunakan untuk panggilan pengujian API berikutnya.

Menguji API rekomendasi

  1. Di Cloud Shell, tetapkan variabel lingkungan untuk Kunci API aplikasi dengan melakukan panggilan curl ke Apigee API:

    APIKEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://apigee.googleapis.com/v1/organizations/$ORG/developers/demo@any.com/apps/product-recommendations-v1-app-$ENV \
        | jq -r .credentials[0].consumerKey)
    

    Catat nilai APIKEY. Anda memerlukan informasi ini jika nantinya Anda membuat aplikasi AppSheet secara opsional.

  2. Guna mendapatkan hasil untuk nilai CUSTOMER_USERID yang Anda tentukan saat menginstal proxy API, lakukan panggilan pengujian:

    curl -s https://$ENVGROUP_HOSTNAME/v1/recommendations/products \
    -H "x-apikey:$APIKEY" | jq
    

API yang ditentukan oleh Spesifikasi OpenAPI (OAS) memungkinkan permintaan menentukan header berikut:

  • x-apikey: Kunci konsumen aplikasi dari skema keamanan.
  • x-userid: ID pengguna yang membuat permintaan. Jika tidak diberikan, nilai ini akan ditetapkan secara default ke nilai CUSTOMER_USERID yang dikonfigurasi di proxy.
  • cache-control: Jumlah waktu untuk meng-cache respons. Header ini memungkinkan Anda meng-cache respons selama 300 detik atau menggantinya dengan menentukan no-cache.

Untuk mengubah nilai CUSTOMER_USERID atau mengontrol penyimpanan dalam cache, Anda dapat menetapkan nilai header seperti yang ditunjukkan dalam contoh panggilan berikut:

curl -s "https://$ENVGROUP_HOSTNAME/v1/recommendations/products" \
-H "x-apikey:$APIKEY" \
-H "x-userid:$CUSTOMER_USERID" \
-H "Cache-Control:no-cache" | jq

Respons terhadap panggilan contoh serupa dengan berikut ini:

{
  "products": [
    {
      "productid": "GGOEGAAX0037",
      "name": "Aviator Sunglasses",
      "description": "The ultimate sunglasses",
      "price": "42.42",
      "image": "products_Images/sunglasses.jpg"
    },
    {
      "productid": "GGOEYDHJ056099",
      "name": "Coffee Mug",
      "description": "Best Coffee Mug",
      "price": "4.2",
      "image": "products_Images/mug.jpg"
    },
    {
      "productid": "GGOEGAAX0351",
      "name": "Loafers",
      "description": "Most comfortable loafers",
      "price": "38.99",
      "image": "products_Images/loafers.jpg"
    },
    {
      "productid": "GGOEGDWC020199",
      "name": "Hairdryer",
      "description": "Hotest hairdryer",
      "price": "84.99",
      "image": "products_Images/hairdryer.jpg"
    },
    {
      "productid": "GGOEGAAX0318",
      "name": "Bamboo glass jar",
      "description": "Bamboo glass jar",
      "price": "19.99",
      "image": "products_Images/bamboo-glass-jar.jpg"
    }
  ]
}

Kebijakan Apigee

Kebijakan Apigee yang tercantum di bagian berikut digunakan dalam paket proxy API.

Pra-alur

SpikeArrest
Melindungi layanan BigQuery backend dari lonjakan traffic.
Kuota
Membatasi permintaan API berdasarkan aplikasi konsumen dan developer. Batas throttle dikonfigurasi dalam produk API.
ResponsCache - uri
Kurangi permintaan ke data warehouse BigQuery dengan meng-cache respons dari layanan.

Alur produk

ApplyMessage - buat permintaan kueri
Tetapkan permintaan HTTP dengan kueri SQL untuk mengambil daftar rekomendasi produk dari set data BigQuery.
Kebijakan JavaScript dan ExtractVariable
Format data dari layanan BigQuery dan buat pesan respons yang lebih mudah digunakan.
LookupCache - Sesi Spanner
Cari ID sesi database Spanner dari cache Apigee.
Info Layanan - Sesi Spanner
Buat permintaan ke layanan Spanner dan buat sesi database jika cache Apigee tidak memiliki ID sesi atau ID-nya sudah tidak berlaku.
filledCache - Sesi Spanner
Isi ID sesi Spanner ke cache Apigee.
ServiceCallout - pencarian katalog produk
Ambil detail produk dari database katalog produk Spanner.
JavaScript - memformat data produk
Buat pesan respons API yang sesuai dengan OAS dengan memformat data dari database katalog produk.

Alur OpenAPI

TetapkanMessage - JSON OAS
Tetapkan respons JSON OAS untuk API.

Opsional: Membuat aplikasi AppSheet menggunakan Apigee sebagai sumber data

Untuk menampilkan rekomendasi produk kepada pengguna akhir situs e-commerce dan kepada pengguna bisnis, Anda dapat membuat aplikasi AppSheet seperti yang ditunjukkan di bagian ini.

Membuat akun AppSheet

Buat akun AppSheet menggunakan alamat email Anda.

Membuat sumber data

AppSheet menggunakan proxy API sebagai sumber data untuk aplikasi baru Anda. Untuk membuat sumber data, lakukan hal berikut:

  1. Login ke AppSheet.
  2. Di halaman Akun Saya, klik Sumber > Sumber Data Baru.
  3. Dalam dialog Add a new data source, masukkan nama proxy product-recommendations-v1, lalu klik Apigee.
  4. Dalam dialog Add Apigee API connection information, setel opsi berikut:

    1. Pilih Manual.
    2. Di kolom Kunci API Apigee, masukkan kunci API untuk aplikasi Anda, yang digunakan untuk menguji proxy. Jika Anda tidak memiliki kunci API, dapatkan di Cloud Shell dengan menjalankan echo $APIKEY.
    3. Di kolom Jalur Dasar API Apigee, masukkan:

      https://ENVGROUP_HOSTNAME/v1/recommendations
      

      Ganti ENVGROUP_HOSTNAME dengan nama host yang dikonfigurasi di UI Apigee untuk Admin > Environments > Groups.

    4. Di kolom Jalur Resource API, masukkan akhiran jalur products.

    5. Klik Uji.

    6. Setelah pengujian berhasil diselesaikan, klik Authorize Access.

Setelah Anda mengizinkan akses, konsol AppSheet akan menampilkan kartu baru untuk product-recommendations-v1.

Membuat aplikasi

  1. Buka halaman products-template app AppSheet.
  2. Klik Salin dan Sesuaikan. Dialog Clone your App akan ditampilkan.
  3. Di kolom App name, masukkan nama proxy, product-recommendations-v1, lalu klik Copy app. Tunggu beberapa beberapa saat sampai aplikasi Anda selesai dibuat.
  4. Di halaman Selamat datang di aplikasi Anda, klik Sesuaikan aplikasi. Secara default, aplikasi menggunakan sumber data sampel di Spreadsheet Google.
  5. Ubah sumber data agar cocok dengan sumber data Apigee yang Anda buat sebelumnya:

    1. Klik + Tabel Baru, lalu klik rekomendasi produk v1.
    2. Pada dialog Choose a Sheet/Table, pilih products.
    3. Dalam dialog Create a new table, klik Read-Only, lalu klik Add This Table.

    Aplikasi ditampilkan dengan tab products 2 dan tampilan data yang berbeda. Tampilan data baru memiliki nilai yang berbeda untuk deskripsi dan harga setiap item. Perhatikan bahwa urutan item tidak sama dengan urutan prediksi.

  6. Ubah urutan item yang ditampilkan dari sumber data dengan menghapus pengurutan default AppSheet:

    1. Di menu navigasi samping, pilih UX.
    2. Di bagian Tampilan Utama, pilih produk 2.
    3. Di bagian View Options, di samping Sort by, hapus entri untuk name, Ascending. Perhatikan bahwa urutan yang ditampilkan di AppSheet sekarang sama dengan hasil panggilan API, dengan item terakhir dari respons di bagian bawah.
  7. Simpan aplikasi.

Anda juga dapat menghapus UX dan tabel Produk asli, serta mengganti nama tabel "produk 2" dan tampilan menjadi "Rekomendasi Produk".

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam prosedur ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

Untuk menghindari biaya berulang, hapus reservasi Slot BigQuery Flex, set data BigQuery, dan model AI Platform.

Menghapus reservasi Slot BigQuery Flex

  1. Di halaman BigQuery konsol Google Cloud, pilih Capacity management, lalu klik tab Reservasi.
  2. Buka entri model.
  3. Di samping reservasi, klik View actions, lalu klik Delete.
  4. Di samping entri model, klik View actions, lalu klik Delete.
  5. Di Cloud Shell, hapus deployment, proxy, dan artefak terkaitnya:

    mvn -P eval process-resources -Dbearer=$(gcloud auth print-access-token) \
        -DapigeeOrg=$ORG -DapigeeEnv=$ENV -Dskip.integration=true \
        apigee-config:apps apigee-config:apiproducts apigee-config:developers -Dapigee.config.options=delete \
        apigee-enterprise:deploy -Dapigee.options=clean
    
  6. Hapus resource Spanner:

    ./cleanup_spanner.sh
    

Menghapus set data BigQuery

  1. Di halaman BigQuery Konsol Google Cloud, di bagian Resource, luaskan project yang Anda gunakan untuk solusi ini.
  2. Pilih set data bqml, lalu klik Delete dataset.
  3. Di jendela overlay yang muncul, masukkan bqml, lalu klik Delete.

Menghapus model AI Platform

  1. Di konsol Google Cloud, buka halaman AI Platform Models.

    Buka Model AI Platform

  2. Dalam daftar model, klik rpm_bqml_model.

  3. Di halaman Model Details, centang kotak untuk versi V_1 (default).

  4. Klik Lainnya, lalu klik Hapus.

  5. Setelah versi selesai dihapus, klik Back untuk kembali ke daftar model.

  6. Pilih kotak centang untuk model rpm_bqml_model.

  7. Klik Lainnya, lalu klik Hapus.

  8. Di Cloud Shell, hapus akun layanan:

    gcloud iam service-accounts delete $SA
    

Langkah selanjutnya