Antipola: Memanggil panggilan API Apigee dari proxy API

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

Apigee memiliki utilitas canggih yang disebut Apigee API yang menawarkan layanan seperti:

  • Men-deploy atau membatalkan deployment proxy API
  • Mengonfigurasi host virtual, keystore, dan truststore, dan sebagainya
  • Membuat, menghapus, dan memperbarui entity seperti peta nilai kunci (KVM), produk API, aplikasi developer, developer, kunci konsumen, dan sebagainya
  • Mengambil informasi tentang entitas ini

Layanan ini dapat diakses melalui komponen yang disebut Management Server di platform Apigee. Layanan ini dapat dipanggil dengan mudah menggunakan bantuan panggilan API sederhana.

Terkadang kami mungkin perlu menggunakan satu atau beberapa layanan ini dari proxy API saat runtime. Hal ini karena entity seperti KVM, token akses OAuth, produk API, aplikasi developer, developer, kunci konsumen, dan sebagainya berisi informasi yang berguna dalam bentuk key-value pair, atribut kustom, atau sebagai bagian dari profilnya.

Misalnya, Anda dapat menyimpan informasi berikut di KVM agar lebih aman dan dapat diakses saat runtime:

  • URL target backend
  • Properti lingkungan
  • Kredensial keamanan sistem pihak ketiga atau backend

Demikian pula, Anda mungkin ingin mendapatkan daftar produk API atau alamat email developer pada runtime. Informasi ini akan tersedia sebagai bagian dari profil aplikasi developer.

Semua informasi ini dapat digunakan secara efektif pada runtime untuk mengaktifkan perilaku dinamis dalam kebijakan atau kode kustom dalam Apigee.

Antipola

API Apigee lebih disarankan dan berguna untuk tugas administratif, serta tidak boleh digunakan untuk menjalankan logika runtime apa pun dalam alur proxy API. Hal ini terjadi karena:

  • Penggunaan Apigee API untuk mengakses informasi tentang entity seperti KVM, token akses OAuth, atau untuk tujuan lain dari proxy API akan menyebabkan dependensi pada Server Pengelolaan.
  • Server Pengelolaan bukan bagian dari komponen runtime Apigee, sehingga mungkin tidak memiliki ketersediaan yang tinggi.
  • Server Pengelolaan juga mungkin tidak disediakan dalam jaringan atau pusat data yang sama, sehingga dapat menyebabkan latensi jaringan saat runtime.
  • Entri di Server Pengelolaan disimpan dalam cache untuk jangka waktu yang lebih lama, sehingga Anda mungkin tidak dapat langsung melihat data terbaru di proxy API jika Anda melakukan operasi tulis dan baca dalam waktu singkat.
  • Meningkatkan hop jaringan saat runtime.

Dalam contoh kode di bawah, panggilan API Apigee dilakukan melalui kode JavaScript kustom untuk mengambil informasi dari KVM:

var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')

Jika Server Pengelolaan tidak tersedia, kode JavaScript yang memanggil panggilan API Apigee akan gagal. Hal ini kemudian menyebabkan permintaan API gagal.

Dampak

  • Memperkenalkan dependensi tambahan pada Server Pengelolaan selama runtime. Kegagalan apa pun di Server Pengelolaan akan memengaruhi panggilan API.
  • Kredensial pengguna untuk Apigee API harus disimpan secara lokal atau di penyimpanan yang aman seperti KVM terenkripsi.
  • Implikasi performa karena pemanggilan layanan pengelolaan melalui jaringan.
  • Mungkin tidak langsung melihat nilai yang diperbarui karena masa berlaku cache yang lebih lama di Server Pengelolaan.

Praktik terbaik

Ada cara yang lebih efektif untuk mengambil informasi dari entity seperti KVM, produk API, aplikasi developer, developer, kunci konsumen, dan sebagainya saat runtime. Berikut adalah beberapa contohnya:

  • Gunakan kebijakan KeyValueMapOperations untuk mengakses informasi dari KVM. Berikut ini kode contoh yang menunjukkan cara mengambil informasi dari KVM:
    <!-- /antipatterns/examples/2-6.xml -->
    <KeyValueMapOperations mapIdentifier="urlMap" async="false"
        continueOnError="false" enabled="true" name="GetURLKVM">
      <DisplayName>GetURLKVM</DisplayName>
      <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
      <Scope>environment</Scope>
      <Get assignTo="urlHosti" index="2">
        <Key>
          <Parameter>urlHost_1</Parameter>
        </Key>
      </Get>
    </KeyValueMapOperations>
    
  • Untuk mengakses informasi tentang produk API, aplikasi developer, developer, kunci konsumen, dan sebagainya di proxy API, Anda dapat melakukan salah satu tindakan berikut:
    • Jika alur Proxy API memiliki kebijakan VerifyAPIKey, Anda dapat mengakses informasi tersebut menggunakan variabel alur yang diisi sebagai bagian dari kebijakan ini. Berikut adalah kode contoh yang menunjukkan cara mengambil nama dan informasi created_by dari Aplikasi Developer menggunakan JavaScript:
      <!-- /antipatterns/examples/2-7.xml -->
      print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name"));
      print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
      
    • Jika alur Proxy API Anda tidak memiliki kebijakan VerifyAPIKey, Anda dapat mengakses profil produk API, aplikasi developer, dan sebagainya menggunakan kebijakan AccessEntity dan ExtractVariables:
      1. Ambil profil aplikasi developer dengan kebijakan AccessEntity:
        <!-- /antipatterns/examples/2-8.xml -->
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp">
          <DisplayName>GetDeveloperApp</DisplayName>
          <EntityType value="app"></EntityType>
          <EntityIdentifier ref="developer.app.name" type="appname"/>
          <SecondaryIdentifier ref="developer.id" type="developerid"/>
        </AccessEntity>
        
      2. Ekstrak appId dari aplikasi developer dengan kebijakan ExtractVariables:
        <!-- /antipatterns/examples/2-9.xml -->
        <ExtractVariables name="Extract-Developer App-Info">
          <!--
            The source element points to the variable populated by AccessEntity policy.
            The format is <policy-type>.<policy-name>
            In this case, the variable contains the whole developer profile.
          -->
          <Source>AccessEntity.GetDeveloperApp"</Source>
          <VariablePrefix>developerapp</VariablePrefix>
          <XMLPayload>
            <Variable name="appld" type="string">
              <!-- You parse elements from the developer profile using XPath. -->
              <XPath>/App/AppId</XPath>
            </Variable>
          </XMLPayload>
        </ExtractVariables>
        

Bacaan lebih lanjut