Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
HTTP_REQUEST
Kapan harus digunakan
Gunakan HTTP_REQUEST saat fungsi Anda perlu memanggil layanan eksternal. Kasus penggunaan umum termasuk mengambil data identitas dari penyedia resolusi, mengambil segmen audiens dari platform manajemen data, dan mengirim informasi sesi ke titik akhir pencatatan.
Bidang konfigurasi
Sebuah HTTP_REQUEST fungsi memiliki bidang-bidang berikut:
-
Runtime — Bahasa ekspresi. Setel ini ke
JSONATA. -
MethodType— Metode HTTP. Nilai yang didukung adalah
GETdanPOST. -
Url — URL untuk mengirim permintaan ke. Anda dapat menggunakan URL statis atau ekspresi Jsonata yang membangun URL secara dinamis.
-
Header - Header HTTP untuk disertakan dalam permintaan, ditentukan sebagai nama header dan pasangan nilai. Gunakan sintaks
{%...%}ekspresi untuk nilai header dinamis. Nilai statis dapat ditentukan secara langsung sebagai string. -
Tubuh — Badan permintaan untuk mengirim. Digunakan dengan
POSTpermintaan. Anda dapat menggunakan ekspresi Jsonata untuk membangun tubuh secara dinamis. -
RequestTimeoutMilliseconds(wajib) — Berapa lama menunggu tanggapan.
-
Output - Mendefinisikan nilai yang akan dihasilkan setelah panggilan HTTP selesai. Setiap entri memetakan kunci keluaran (seperti
player_params.envelope_id) ke ekspresi yang dapat mereferensikanresponseobjek.
Untuk batasan ukuran dan batasan yang berlaku untuk bidang ini, lihatBatas.
Bagaimana permintaan diproses
MediaTailor Memproses HTTP_REQUEST fungsi dalam dua langkah:
-
Membangun permintaan — MediaTailor mengevaluasi
Url,Headers, danBodyekspresi terhadap status sesi saat ini. Nilai yang dievaluasi ini membentuk permintaan HTTP keluar. -
Proses respon — Setelah panggilan HTTP selesai, MediaTailor evaluasi ekspresi di blok output. Ekspresi ini dapat mereferensikan status sesi asli dan
responseobjek yang dikembalikan oleh panggilan.
Bidang respons
Setelah panggilan HTTP selesai, Anda dapat mereferensikan bidang berikut dalam ekspresi Output Anda:
| Bidang | Tipe | Deskripsi |
|---|---|---|
response.body |
Objek atau Array | Badan respons diuraikan sebagai JSON. Setel ke null jika tubuh melebihi 20.000 karakter atau JSON tidak valid. |
response.statusCode |
Bilangan Bulat | Kode status HTTP dikembalikan oleh layanan eksternal. Setel null ke kegagalan jaringan. |
response.text |
String | Badan respons mentah sebagai string, terpotong menjadi 20.000 karakter. Setel "Internal Error" ke kegagalan jaringan. |
penting
response.bodyBidang adalah null ketika respons melebihi 20.000 karakter, bahkan jika responsnya adalah JSON yang valid.
catatan
Objek respon hanya tersedia di blok Output dari suatu HTTP_REQUEST fungsi. Anda tidak dapat mereferensikan bidang respons di bidang Url, Header, atau Body. Dalam aSEQUENTIAL_EXECUTOR, setiap HTTP_REQUEST fungsi hanya dapat mengakses responsnya sendiri.
Nilai null berarti data tidak tersedia. Ini terjadi ketika panggilan HTTP gagal (kesalahan jaringan atau batas waktu) atau ketika badan respons melebihi 20.000 karakter atau JSON tidak valid.
Perilaku kegagalan jaringan
Jika panggilan HTTP gagal karena kesalahan jaringan atau batas waktu, response.statusCode dan response.body disetel kenull, dan response.text disetel ke"Internal
Error". Ekspresi Output Anda masih berjalan, jadi selalu periksa response.statusCode sebelum menggunakan data respons.
Tip
Gunakan ekspresi bersyarat untuk menangani kegagalan dengan anggun: {%response.statusCode = 200 ? response.body.value :
'default'%}
Contoh: Ambil data identitas
Fungsi berikut memanggil API resolusi identitas saat sesi dimulai dan menyimpan hasilnya dalam parameter pemain. Ini dirancang untuk kait PRE_SESSION_INITIALIZATION siklus hidup.
{ "FunctionId": "fetchIdentityEnvelope", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity.example.com/v1/resolve?ip=' & $encodeUrlComponent(session.client_ip)%}", "Headers": { "Authorization": "{%'Bearer my_api_token'%}", "Accept": "application/json" }, "RequestTimeoutMilliseconds": 2000, "Output": { "player_params.identity_envelope": "{%response.statusCode = 200 ? response.body.envelope : ''%}" } } }
Untuk panduan lengkap dari contoh serupa, lihat. Contoh fungsi