Menggunakan variabel flow

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Secara konseptual, variabel flow adalah objek yang dapat Anda akses dari dalam kebijakan atau utilitas (seperti alat alat Trace). Library ini memungkinkan Anda mempertahankan status yang terkait dengan transaksi API yang diproses oleh Apigee Edge.

Apa yang dimaksud dengan variabel alur?

Variabel alur tersedia dalam konteks alur proxy API, dan melacak status dalam transaksi API dengan 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 diperoleh saat kebijakan dieksekusi. Misalnya, setelah kebijakan dijalankan 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" di Edge dan diisi secara otomatis setiap kali permintaan API diterima. Opsi ini tersedia di seluruh transaksi API. Anda juga dapat membuat variabel kustom sendiri menggunakan kebijakan seperti kebijakanAssignMessage, atau dalam kode JavaScript, Node.js, dan Java.

Seperti yang akan Anda lihat, variabel memiliki cakupan, dan di mana variabel tersebut dapat diakses sebagian bergantung pada waktu pembuatannya dalam alur proxy API. Secara umum, saat dibuat, variabel akan tersedia untuk semua kebijakan dan kode yang dijalankan nanti dalam alur transaksi API.

Bagaimana cara menggunakan variabel flow?

Variabel alur digunakan dalam kebijakan dan alur bersyarat:

  • Kebijakan dapat mengambil status dari variabel alur dan menggunakannya untuk melakukan pekerjaannya.

    Misalnya, kebijakan VerifyJWT dapat mengambil token untuk diverifikasi dari variabel flow, lalu melakukan verifikasi pada token tersebut. Sebagai contoh lainnya, kebijakan JavaScript dapat mengambil variabel alur dan mengenkode data yang terdapat dalam variabel tersebut.

  • Alur bersyarat dapat mereferensikan variabel aliran untuk mengarahkan alur API melalui Edge, seperti cara kerja pernyataan switch dalam pemrograman.

    Misalnya, kebijakan untuk menampilkan kesalahan hanya dapat dijalankan jika variabel flow tertentu ditetapkan. Terakhir, Anda bisa mendapatkan dan menetapkan variabel alur di aplikasi target Node.js.

Mari kita lihat contoh bagaimana variabel digunakan di setiap konteks ini.

Variabel flow dalam kebijakan

Beberapa kebijakan menggunakan variabel alur sebagai input.

Misalnya, kebijakanAssignMessage berikut mengambil nilai variabel alur client.ip dan menempatkannya di header permintaan yang disebut My-Client-IP. Jika ditambahkan ke alur request, kebijakan ini akan menetapkan header yang diteruskan ke target backend. Jika ditetapkan pada alur response, 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>

Sebagai 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 perlukan).

Kemudian, Anda dapat menjalankan flow kondisional yang menyatakan "jika jumlah kuota saat ini di bawah 50% dari maksimum, dan saat ini antara pukul 09.00 dan 17.00, terapkan kuota yang berbeda". Kondisi ini mungkin bergantung pada nilai jumlah kuota saat ini dan pada variabel alur yang disebut system.time, yang merupakan salah satu variabel Edge bawaan.

Variabel flow dalam flow bersyarat

Alur bersyarat mengevaluasi variabel alur dan memungkinkan proxy berperilaku secara dinamis. Kondisi biasanya digunakan untuk mengubah perilaku alur, langkah, dan aturan rute.

Berikut adalah flow kondisional yang mengevaluasi nilai variabel request.verb dalam langkah alur proxy. Dalam hal ini, jika kata kerja permintaan adalah POST, kebijakan VerifyAPIKey akan dieksekusi. 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 asal variabel seperti request.verb, client.ip, dan system.time? Kapan instance 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 dijalankan oleh kebijakan ini menggunakan model objek JavaScript Apigee, yang memberikan 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 kebijakanAssignMessage (ditunjukkan sebelumnya). Ini hanyalah cara lain untuk melakukan hal yang sama di Edge. Kunci yang perlu diingat adalah JavaScript yang dijalankan oleh kebijakan JavaScript memiliki akses ke semua variabel alur yang ada dan berada dalam cakupan dalam alur 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 ini contoh sederhana dengan variabel bernama custom.foo ditetapkan ke nilai Bar. Setelah ditetapkan, variabel baru ini akan tersedia untuk setiap kebijakan atau kode lainnya 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 bekerja dengan variabel di Mengakses variabel alur di Node.js.

Memahami cakupan variabel flow

Cakupan variabel berkaitan dengan alur atau "siklus proses" keseluruhan 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 akan mengevaluasi informasi yang tersedia dan memutuskan tindakan selanjutnya. Dalam prosesnya, proxy dapat mengeksekusi kode kebijakan atau melakukan pencabangan bersyarat.

Gambar berikut mengilustrasikan urutan alur ini. Perhatikan bagaimana alurnya terdiri dari empat segmen utama: request ProxyEndpoint, TargetEndpoint request, response TargetEndpoint, dan response ProxyEndpoint.

Ingatlah struktur alur ini saat kita mulai mempelajari variabel alur di sepanjang topik ini.

Bagaimana cakupan variabel terkait dengan alur proxy

Segera setelah dapat memvisualisasikan alur pesan melalui proxy, seperti yang dijelaskan sebelumnya, Anda dapat mulai memahami cakupan variabel. Yang kami maksud dengan cakupan adalah titik dalam siklus proses alur proxy saat variabel pertama kali dibuat instance-nya.

Misalnya, jika Anda memiliki kebijakan yang dikaitkan ke segmen permintaan ProxyEndpoint, kebijakan tersebut tidak akan dapat mengakses variabel apa pun yang dicakupkan ke segmen permintaan TargetEndpoint. Alasannya adalah segmen permintaan TargetEndpoint dari alur belum dieksekusi, sehingga proxy API belum memiliki kesempatan untuk mengisi variabel dalam cakupan tersebut.

Tabel berikut mencantumkan kumpulan lengkap cakupan variabel dan menunjukkan kapan variabel tersebut akan 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 di seluruh siklus proses alur proxy.

Misalnya, ada variabel Edge bawaan yang disebut client.ip. Variabel ini memiliki cakupan "permintaan proxy". Isinya otomatis diisi dengan alamat IP klien yang memanggil proxy. Kolom ini diisi saat permintaan pertama kali mencapai ProxyEndpoint dan tetap tersedia selama siklus proses alur proxy.

Ada variabel bawaan lain yang disebut target.url. Cakupan variabel ini adalah "target request". Kolom ini diisi di segmen permintaan TargetEndpoint dengan URL permintaan yang dikirim ke target backend. Jika Anda 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 berpikir tentang ruang lingkup variabel. Misalkan Anda ingin menyalin seluruh konten objek permintaan (header, parameter, isi) dan menetapkannya ke payload respons untuk dikirim kembali ke aplikasi pemanggil. Anda dapat menggunakan kebijakanAssignMessage 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. Tetapi di mana kebijakan ini harus ditempatkan dalam alur proxy? Jawabannya adalah bahwa variabel tersebut harus ditempatkan pada respons TargetEndpoint, karena cakupan variabel respons adalah "target respons".

Mereferensikan variabel alur

Semua variabel bawaan di Apigee Edge mengikuti konvensi penamaan notasi titik. Konvensi ini akan memudahkan penentuan tujuan variabel. Misalnya system.time.hour dan request.content.

Apigee mencadangkan berbagai awalan untuk mengatur variabel yang relevan dengan tepat. Awalan ini mencakup:

  • request
  • response
  • system
  • target

Untuk mereferensikan variabel dalam kebijakan, masukkan dalam tanda kurung kurawal. Misalnya, kebijakanAssignMessage berikut menggunakan 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 bersyarat, tanda 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 flow 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 secara manual mengasumsikan jenis yang diberikan saat dibuat, dan bergantung pada jenis nilai yang diizinkan. Misalnya, variabel yang dibuat dalam kode Node.js dibatasi untuk Angka, String, Boolean, null, atau belum ditentukan.

Menggunakan variabel flow dalam kebijakan

Banyak kebijakan membuat variabel flow sebagai bagian dari eksekusi normalnya. Referensi kebijakan mendokumentasikan semua variabel khusus kebijakan ini.

Saat Anda bekerja dengan proxy dan kebijakan, pastikan untuk membaca referensi kebijakan guna mengetahui variabel mana yang dibuat dan digunakan untuk apa. Misalnya, kebijakan Kuota membuat satu set 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 Trace tool, 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.

Pada contoh berikut, Extract Variables mengurai pesan respons dan menyimpan data spesifik yang diambil dari respons. Kebijakan ini membuat dua variabel kustom, geocoderesponse.latitude dan geocoderesponse.longitude, lalu menetapkan nilai pada 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 membuat variabel secara otomatis. Anda dapat mengakses variabel tersebut dalam konteks alur proxy, dan variabel tersebut didokumentasikan dalam referensi Kebijakan pada setiap topik kebijakan.

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, eksekusi JavaScript di Edge memiliki akses langsung ke variabel alur proxy.

Untuk mengakses variabel dalam kode JavaScript, panggil metode pengambil/penyetel 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 dikenal seperti yang dijelaskan sebelumnya dalam Memvisualisasikan alur proxy API.

Objek context sesuai dengan variabel "global" yang tersedia, 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 siap pakai yang dapat ditulis. Di sini, kita membuat variabel kustom bernama organization.name.myorg dan menetapkan nilai pada variabel kustom 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 memperoleh/menetapkan variabel alur proxy dalam kode Java yang dijalankan dengan kebijakan JavaCallout.

Mengakses variabel alur di aplikasi Node.js

Anda bisa mendapatkan, menetapkan, dan menghapus variabel flow dari kode Node.js yang di-deploy ke Edge. Yang perlu Anda lakukan adalah "require" modul akses apigee dalam kode Anda. Untuk mengetahui detailnya, lihat Mengakses variabel alur di Node.js.

Yang perlu diingat

Berikut adalah beberapa hal penting yang perlu diingat tentang variabel alur:

  • Beberapa variabel "bawaan" dibuat instance-nya dan diisi secara otomatis oleh proxy itu sendiri. Hal ini didokumentasikan dalam Referensi variabel flow.
  • Anda dapat membuat variabel khusus yang tersedia untuk digunakan di alur proxy. Anda dapat membuat variabel menggunakan kebijakan seperti kebijakanAssignMessage dan kebijakan JavaScript, serta dalam kode Node.js.
  • Variabel memiliki ruang lingkup. Misalnya, beberapa variabel diisi secara otomatis saat proxy pertama menerima permintaan dari aplikasi. Variabel lain diisi dalam segmen alur respons proxy. Variabel respons ini tetap tidak ditentukan hingga segmen respons dieksekusi.
  • Saat dijalankan, kebijakan dapat membuat dan mengisi variabel spesifik per kebijakan. Dokumentasi untuk setiap kebijakan mencantumkan semua variabel khusus kebijakan yang relevan ini.
  • Alur 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 nantinya digunakan oleh kebijakan lain.
  • Anda dapat memperoleh dan menetapkan banyak variabel flow dari dalam Node.js dengan menggunakan JavaScript straight (dan model objek JavaScript kami) atau kebijakan JavaCallout, yang mengeksekusi kode di Edge.

Contoh kode terkait

Contoh proxy API tersedia di GitHub, serta mudah didownload dan digunakan. Lihat Menggunakan proxy API contoh untuk mengetahui informasi tentang mendownload dan menggunakan contoh. Lihat Daftar contoh untuk mengetahui deskripsi contoh proxy API dan fungsinya.

Contoh proxy yang menampilkan penggunaan variabel dan pemrosesan variabel meliputi:

  • variables - Menunjukkan cara mengekstrak dan menetapkan variabel berdasarkan transpor serta konten pesan 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 - Menerapkan penerapan kebijakan bersyarat yang sederhana berdasarkan nilai variabel.

Topik terkait

  • Semua variabel yang secara otomatis diisi di proxy API tercantum dalam Referensi variabel flow. Referensi 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 flow dalam referensi Kebijakan kuota.