Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Secara konseptual, variabel alur adalah objek yang dapat Anda akses dari dalam kebijakan atau utilitas (seperti alat Alat pelacakan). Fungsi ini memungkinkan Anda mempertahankan status yang terkait dengan transaksi API yang diproses oleh Apigee Edge.
Apa yang dimaksud dengan variabel alur?
Variabel alur ada dalam konteks alur proxy API, dan melacak status dalam transaksi API seperti cara variabel bernama melacak status dalam program software. Variabel alur menyimpan informasi seperti:
- Alamat IP, header, jalur URL, dan payload yang dikirim dari aplikasi yang meminta
- Informasi sistem seperti tanggal dan waktu saat Edge menerima permintaan
- Data yang berasal saat kebijakan dieksekusi. Misalnya, setelah kebijakan dieksekusi yang memvalidasi token OAuth, Edge akan membuat variabel alur yang menyimpan informasi seperti nama aplikasi yang meminta.
- Informasi tentang respons dari sistem target
Beberapa variabel "bawaan" untuk Edge dan diisi secara otomatis setiap kali permintaan API diterima. Fitur ini tersedia di seluruh transaksi API. Anda juga dapat membuat variabel kustom sendiri menggunakan kebijakan seperti kebijakan MenetapkanMessage, atau dalam kode JavaScript, Node.js, dan Java.
Seperti yang akan Anda lihat, variabel memiliki cakupan, dan tempat variabel dapat diakses sebagian bergantung pada waktu variabel tersebut dibuat dalam alur proxy API. Secara umum, saat dibuat, variabel tersedia untuk semua kebijakan dan kode yang dieksekusi nanti dalam alur transaksi API.
Bagaimana variabel alur digunakan?
Variabel alur digunakan dalam kebijakan dan alur bersyarat:
- Kebijakan dapat mengambil status dari variabel alur dan menggunakannya untuk melakukan
tugasnya.
Misalnya, kebijakan VerifyJWT dapat mengambil token yang akan diverifikasi dari variabel alur, lalu melakukan verifikasi pada token tersebut. Sebagai contoh lain, kebijakan JavaScript dapat mengambil variabel alur dan mengenkode data yang terdapat dalam variabel tersebut.
- Flow kondisional dapat mereferensikan variabel flow untuk mengarahkan flow API
melalui Edge, seperti cara kerja pernyataan switch dalam pemrograman.
Misalnya, kebijakan untuk menampilkan fault dapat dijalankan hanya jika variabel flow tertentu ditetapkan. Terakhir, Anda dapat mendapatkan dan menetapkan variabel alur di aplikasi target Node.js.
Mari kita lihat contoh penggunaan variabel dalam setiap konteks ini.
Variabel alur dalam kebijakan
Beberapa kebijakan menggunakan variabel alur sebagai input.
Misalnya, kebijakan AssignMessage berikut mengambil
nilai variabel alur client.ip
dan menempatkannya di header permintaan
yang disebut My-Client-IP
. Jika ditambahkan ke alur permintaan, kebijakan ini akan menetapkan header yang diteruskan ke target backend. Jika ditetapkan pada alur respons, header akan dikirim
kembali ke aplikasi klien.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="My-Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Untuk contoh lain, saat kebijakan Kuota dijalankan, beberapa variabel flow akan diisi
dengan nilai terkait kebijakan. Salah satu variabel ini
disebut ratelimit.my-quota-policy.used.count
(dengan my-quota-policy
adalah
nama kebijakan kuota yang Anda minati).
Anda mungkin nanti akan menjalankan alur bersyarat yang menyatakan "jika jumlah kuota saat ini di bawah 50% dari maksimum, dan antara pukul 09.00 hingga 17.00, terapkan kuota yang berbeda". Kondisi ini mungkin bergantung pada nilai jumlah kuota saat ini
dan pada variabel flow yang disebut system.time
, yang merupakan salah satu variabel
Edge bawaan.
Variabel alur dalam alur bersyarat
Alur bersyarat mengevaluasi variabel alur dan memungkinkan proxy berperilaku dinamis. Kondisi biasanya digunakan untuk mengubah perilaku alur, langkah, dan aturan rute.
Berikut adalah alur kondisional yang mengevaluasi
nilai variabel request.verb
dalam langkah alur proxy. Dalam hal ini, jika kata kerja permintaan adalah POST, kebijakan VerifyAPIKey akan dijalankan. Ini adalah pola umum yang digunakan dalam
konfigurasi proxy API.
<PreFlow name="PreFlow"> <Request> <Step> <Condition>request.verb equals "POST"</Condition> <Name>VerifyApiKey</Name> </Step> </Request> </PreFlow>
Sekarang, Anda mungkin bertanya-tanya, dari mana variabel seperti request.verb
,
client.ip
, dan system.time
berasal? Kapan instance dibuat dan
diisi dengan nilai? Untuk membantu Anda memahami kapan variabel dibuat dan kapan variabel tersebut
tersedia untuk Anda, lihat Memahami cakupan variabel
alur.
Variabel alur dalam kode JavaScript yang dipanggil dengan kebijakan JavaScript
Dengan kebijakan JavaScript, Anda dapat mengeksekusi kode JavaScript dari dalam konteks alur proxy API. JavaScript yang dieksekusi oleh kebijakan ini menggunakan model objek JavaScript Apigee, yang menyediakan akses kode kustom Anda ke objek permintaan, respons, dan konteks yang terkait dengan alur proxy API tempat kode Anda dieksekusi. Misalnya, kode ini menetapkan header respons dengan nilai yang diperoleh dari variabel flow target.name.
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
Teknik penggunaan JavaScript untuk membaca dan menetapkan variabel ini mirip dengan pekerjaan yang dapat Anda lakukan dengan kebijakan AssignMessage (ditampilkan sebelumnya). Ini hanyalah cara lain untuk melakukan hal yang sama di Edge. Hal penting yang perlu diingat adalah JavaScript yang dieksekusi oleh kebijakan JavaScript memiliki akses ke semua variabel flow yang ada dan berada dalam cakupan dalam flow proxy API.
Variabel alur dalam kode Node.js
Dengan mewajibkan modul apigee-access
, Anda dapat menetapkan dan mengakses variabel alur dari dalam kode Node.js yang di-deploy ke Edge.
Berikut adalah contoh sederhana saat variabel yang disebut custom.foo
ditetapkan ke nilai
Bar
. Setelah ditetapkan, variabel baru ini akan tersedia untuk setiap kebijakan atau kode lain yang terjadi dalam alur proxy setelah kode Node.js dieksekusi.
var http = require('http'); var apigee = require('apigee-access'); http.createServer(function (request, response) { apigee.setVariable(request, "custom.foo", "Bar"); response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/');
Anda dapat membaca selengkapnya tentang cara menggunakan apigee-access
untuk menangani variabel di Mengakses variabel alur di Node.js.
Memahami cakupan variabel alur
Cakupan variabel terkait dengan alur atau keseluruhan "siklus proses" panggilan proxy API.
Memvisualisasikan alur proxy API
Untuk memahami cakupan variabel alur, penting untuk memahami atau memvisualisasikan alur pesan melalui proxy API. Proxy API terdiri dari serangkaian langkah pemrosesan pesan yang diatur sebagai alur. Pada setiap langkah dalam alur proxy, proxy mengevaluasi informasi yang tersedia untuknya dan memutuskan tindakan selanjutnya. Selama prosesnya, proxy dapat mengeksekusi kode kebijakan atau melakukan cabang kondisional.
Gambar berikut mengilustrasikan urutan alur ini. Perhatikan bagaimana alur terdiri dari empat segmen utama: permintaan ProxyEndpoint, permintaan TargetEndpoint, respons TargetEndpoint, dan respons ProxyEndpoint.
Ingat struktur alur ini saat kita mulai mempelajari variabel alur di seluruh topik ini.
Cara cakupan variabel terkait dengan alur proxy
Segera setelah Anda dapat memvisualisasikan cara pesan mengalir melalui proxy, seperti yang dijelaskan sebelumnya, Anda dapat mulai memahami cakupan variabel. Yang dimaksud dengan cakupan adalah titik dalam siklus proses alur proxy saat variabel pertama kali dibuat instance-nya.
Misalnya, jika Anda memiliki kebijakan yang dilampirkan ke segmen permintaan ProxyEndpoint, kebijakan tersebut tidak akan dapat mengakses variabel apa pun yang dicakup ke segmen permintaan TargetEndpoint. Alasannya adalah karena segmen permintaan TargetEndpoint dari flow belum dijalankan, sehingga proxy API belum sempat mengisi variabel dalam cakupan tersebut.
Tabel berikut mencantumkan kumpulan lengkap cakupan variabel dan menunjukkan kapan cakupan tersebut tersedia dalam alur proxy.
Cakupan variabel | Tempat variabel ini diisi |
---|---|
permintaan proxy | Segmen permintaan ProxyEndpoint |
permintaan target | Segmen permintaan TargetEndpoint |
respons target | Segmen respons TargetEndpoint |
respons proxy | Segmen respons ProxyEndpoint |
selalu tersedia | Segera setelah proxy menerima permintaan. Variabel ini tersedia melalui seluruh siklus proses alur proxy. |
Misalnya, ada variabel Edge bawaan yang disebut client.ip
. Variabel ini memiliki cakupan "permintaan proxy". Alamat IP klien yang memanggil proxy secara otomatis diisi. Nilai ini diisi saat permintaan pertama kali mencapai ProxyEndpoint dan tetap
tersedia selama seluruh siklus proses alur proxy.
Ada variabel bawaan lain yang disebut target.url
. Cakupan variabel ini adalah "permintaan target". Nilai ini diisi di segmen permintaan TargetEndpoint dengan URL permintaan yang dikirim
ke target backend. Jika mencoba mengakses target.url
di segmen permintaan ProxyEndpoint, Anda akan menerima nilai NULL. Jika Anda mencoba menetapkan variabel ini sebelum berada dalam cakupan,
proxy tidak akan melakukan apa pun—tidak menghasilkan error dan tidak menetapkan variabel.
Berikut adalah contoh sederhana yang menunjukkan cara memahami cakupan variabel. Misalnya, Anda ingin menyalin seluruh konten objek permintaan (header, parameter, isi) dan menetapkannya ke payload respons untuk dikirim kembali ke aplikasi panggilan. Anda dapat menggunakan kebijakan AssignMessage untuk tugas ini. Kode kebijakan akan terlihat seperti ini:
<AssignMessage name="CopyRequestToResponse"> <AssignTo type="response" createNew="false">response</AssignTo> <Copy source="request"/> </AssignMessage>
Kebijakan ini hanya menyalin objek request
dan menetapkannya ke objek response
. Namun, di mana kebijakan ini harus ditempatkan dalam alur proxy? Jawabannya adalah bahwa variabel tersebut harus ditempatkan pada respons TargetEndpoint, karena cakupan variabel respons adalah "respons target".
Mereferensikan variabel alur
Semua variabel bawaan di Apigee Edge mengikuti konvensi penamaan notasi titik. Konvensi ini
memudahkan untuk menentukan tujuan variabel. Misalnya
system.time.hour
dan request.content
.
Apigee mencadangkan berbagai awalan untuk mengatur variabel yang relevan dengan tepat. Awalan ini meliputi:
request
response
system
target
Untuk mereferensikan variabel dalam kebijakan, sertakan variabel dalam tanda kurung kurawal. Misalnya,
kebijakan AssignMessage berikut mengambil nilai variabel client.ip
dan
menempatkannya di header permintaan yang disebut Client-IP
.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Dalam alur kondisional, kurung kurawal tidak diperlukan. Contoh kondisi berikut
mengevaluasi variabel request.header.accept
:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Anda juga dapat mereferensikan variabel alur dalam kode JavaScript dan Java. Untuk informasi selengkapnya, lihat:
Jenis data variabel aliran
Setiap properti variabel alur memiliki jenis data yang ditentukan dengan baik, seperti String, Long, Integer, Boolean, atau Collection. Anda dapat menemukan jenis data yang tercantum di Referensi variabel flow. Untuk variabel yang dibuat oleh kebijakan, lihat topik referensi kebijakan tertentu untuk mengetahui informasi jenis data.
Variabel yang Anda buat mengasumsikan jenis yang diberikan secara manual saat dibuat, dan bergantung pada jenis nilai yang diizinkan. Misalnya, variabel yang dibuat dalam kode Node.js dibatasi untuk Nomor, String, Boolean, null, atau tidak ditentukan.
Menggunakan variabel alur dalam kebijakan
Banyak kebijakan membuat variabel alur sebagai bagian dari eksekusi normalnya. Referensi kebijakan mendokumentasikan semua variabel khusus kebijakan ini.
Saat Anda menggunakan proxy dan kebijakan, pastikan untuk membaca referensi kebijakan untuk mengetahui variabel mana yang dibuat dan kegunaannya. Misalnya, Kebijakan kuota membuat kumpulan variabel yang berisi informasi tentang jumlah dan batas kuota, waktu habis masa berlaku, dan sebagainya.
Beberapa variabel kebijakan berguna untuk proses debug. Anda dapat menggunakan alat Alat pelacakan, misalnya, untuk melihat variabel mana yang ditetapkan pada instance tertentu dalam alur proxy.
Kebijakan ExtractVariables memungkinkan Anda mengisi variabel kustom dengan data yang diekstrak dari pesan. Anda dapat mengekstrak parameter kueri, header, dan data lainnya. Misalnya, Anda dapat mengurai pesan permintaan dan respons menggunakan pola untuk mengekstrak data tertentu dari pesan.
Dalam contoh berikut, Extract Variables mengurai pesan respons dan menyimpan data tertentu
yang diambil dari respons. Kebijakan ini membuat dua variabel kustom,
geocoderesponse.latitude
dan geocoderesponse.longitude
, serta menetapkan
nilai ke variabel tersebut.
<ExtractVariables name="ParseGeocodingResponse"> <Source>response</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Sekali lagi, perhatikan bahwa banyak kebijakan yang secara otomatis membuat variabel. Anda dapat mengakses variabel tersebut dalam konteks alur proxy, dan variabel tersebut didokumentasikan dalam referensi Kebijakan di setiap topik kebijakan individual.
Menggunakan variabel alur dalam kode JavaScript
Anda dapat mengakses dan menetapkan variabel secara langsung dalam kode JavaScript yang dieksekusi dalam konteks proxy API. Melalui model objek JavaScript Apigee, JavaScript yang dieksekusi di Edge memiliki akses langsung ke variabel alur proxy.
Untuk mengakses variabel dalam kode JavaScript, panggil metode pengambil/penyemat pada salah satu objek berikut:
context
proxyRequest
proxyResponse
targetRequest
targetResponse
Seperti yang dapat Anda lihat, referensi objek ini dipetakan ke segmen model alur proxy yang sudah dikenal seperti yang dijelaskan sebelumnya di Memvisualisasikan alur proxy API.
Objek context
sesuai dengan variabel yang tersedia "secara global", seperti variabel sistem. Misalnya, Anda dapat memanggil getVariable()
pada objek context
untuk mendapatkan tahun saat ini:
var year = context.getVariable('system.time.year');
Demikian pula, Anda dapat memanggil setVariable()
untuk menetapkan nilai variabel kustom atau untuk variabel bawaan yang dapat ditulis. Di sini, kita membuat variabel kustom bernama
organization.name.myorg
dan menetapkan nilai ke variabel tersebut.
var org = context.setVariable('organization.name.myorg', value);
Karena dibuat dengan objek context
, variabel ini akan tersedia untuk
semua segmen alur (pada dasarnya, ini seperti membuat variabel global).
Anda juga dapat mendapatkan/menetapkan variabel alur proxy dalam kode Java yang Anda jalankan dengan kebijakan JavaCallout.
Mengakses variabel alur di aplikasi Node.js
Anda dapat mendapatkan, menetapkan, dan menghapus variabel alur dari kode Node.js yang di-deploy ke Edge. Anda hanya perlu "memerlukan" modul akses apigee dalam kode Anda. Untuk mengetahui detailnya, lihat Mengakses variabel alur di Node.js.
Yang perlu diingat
Berikut beberapa hal penting yang perlu diingat tentang variabel alur:
- Beberapa variabel "siap pakai" dibuat instance-nya dan diisi secara otomatis oleh proxy itu sendiri. Hal ini didokumentasikan dalam Referensi variabel alur.
- Anda dapat membuat variabel kustom yang tersedia untuk digunakan dalam alur proxy. Anda dapat membuat variabel menggunakan kebijakan seperti kebijakan AssignMessage dan kebijakan JavaScript, dan dalam kode Node.js.
- Variabel memiliki ruang lingkup. Misalnya, beberapa variabel diisi secara otomatis saat proxy pertama menerima permintaan dari aplikasi. Variabel lainnya diisi dalam segmen alur respons proxy. Variabel respons ini tetap belum ditentukan hingga segmen respons dieksekusi.
- Saat dieksekusi, kebijakan dapat membuat dan mengisi variabel khusus kebijakan. Dokumentasi untuk setiap kebijakan mencantumkan semua variabel spesifik per kebijakan yang relevan.
- Flow bersyarat biasanya mengevaluasi satu atau beberapa variabel. Anda perlu memahami variabel jika ingin membuat alur bersyarat.
- Banyak kebijakan menggunakan variabel sebagai input atau output. Mungkin variabel yang dibuat oleh satu kebijakan akan digunakan kemudian oleh kebijakan lain.
- Anda bisa mendapatkan dan menetapkan banyak variabel alur dari dalam Node.js dengan menggunakan JavaScript langsung (dan model objek JavaScript kami) atau kebijakan JavaCallout, yang mengeksekusi kode di Edge.
Contoh kode terkait
Contoh proxy API ada di GitHub dan mudah didownload serta digunakan. Lihat Menggunakan contoh proxy API untuk informasi tentang cara mendownload dan menggunakan contoh. Lihat Daftar contoh untuk mengetahui deskripsi tentang contoh proxy API dan cara kerjanya.
Contoh proxy yang menampilkan penggunaan variabel dan pemrosesan variabel meliputi:
- variables - Menunjukkan cara mengekstrak dan menetapkan variabel berdasarkan konten pesan transportasi, JSON, dan XML.
- policy-mashup-cookbook - Aplikasi lengkap yang menggunakan komposisi kebijakan untuk memanggil dua API publik, menggabungkan hasil, dan menghasilkan respons yang diperkaya untuk aplikasi klien. Untuk informasi selengkapnya tentang contoh ini, lihat Menggunakan komposisi kebijakan.
- conditional-policy - Mengimplementasikan penerapan kebijakan kondisional sederhana berdasarkan nilai variabel.
Topik terkait
- Semua variabel yang otomatis diisi dalam proxy API tercantum di Referensi variabel flow. Referensi ini juga mencantumkan jenis dan cakupan setiap variabel.
- Jika Anda ingin mengetahui variabel mana yang diisi oleh kebijakan tertentu, lihat topik referensi untuk kebijakan tersebut. Misalnya, lihat Variabel alur dalam referensi Kebijakan kuota.