Antipola: Panggil panggilan Management API dari Proxy API

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

Edge memiliki utilitas canggih yang disebut “API pengelolaan” yang menawarkan layanan seperti:

  • Men-deploy atau membatalkan deployment Proxy API
  • Mengonfigurasi host virtual, keystore dan truststore, dll.
  • Membuat, menghapus, dan/atau memperbarui entity seperti KeyValueMaps, Produk API, Aplikasi Developer, Developer, Kunci Konsumen, dll.
  • Mengambil informasi tentang entity ini

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

Terkadang, kita mungkin perlu menggunakan satu atau beberapa layanan ini dari Proxy API saat runtime. Hal ini karena entitas seperti KeyValueMaps, Token Akses OAuth, Produk API, Aplikasi Developer, Developer, Kunci Konsumen, dll. berisi informasi berguna dalam bentuk pasangan kunci-nilai, atribut kustom, atau sebagai bagian dari profilnya.

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

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

Demikian pula, Anda mungkin ingin mendapatkan daftar Produk API atau alamat email developer saat runtime. Informasi ini akan tersedia sebagai bagian dari profil Aplikasi Developer.

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

Anti-pola

API pengelolaan lebih disukai dan berguna untuk tugas administratif serta tidak boleh digunakan untuk melakukan logika runtime apa pun dalam alur Proxy API. Hal ini dikarenakan:

  • Menggunakan API pengelolaan untuk mengakses informasi tentang entitas seperti KeyValueMaps, Token Akses OAuth, atau untuk tujuan lain dari Proxy API menyebabkan ketergantungan pada Server Pengelolaan.
  • Server Pengelolaan bukan bagian dari komponen runtime Edge, sehingga server tersebut mungkin tidak sangat tersedia.
  • Server Pengelolaan juga mungkin tidak disediakan dalam jaringan atau pusat data yang sama dan oleh karena itu dapat menyebabkan latensi jaringan saat runtime.
  • Entri di server pengelolaan di-cache dalam jangka waktu yang lebih lama, sehingga kita mungkin tidak dapat melihat data terbaru secara langsung di API Proxy jika kita melakukan penulisan dan pembacaan dalam jangka waktu yang singkat.
  • Meningkatkan hop jaringan saat runtime.

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

var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')

Jika server pengelolaan tidak tersedia, panggilan kode JavaScript yang memanggil API pengelolaan akan gagal. Hal ini selanjutnya menyebabkan permintaan API gagal.

Dampak

  • Memperkenalkan dependensi tambahan pada Server Pengelolaan selama runtime. Kegagalan di server Pengelolaan akan memengaruhi panggilan API.
  • Kredensial pengguna untuk Management API harus disimpan secara lokal atau di penyimpanan yang aman seperti Encrypted KVM.
  • Implikasi performa karena memanggil 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 KeyValueMaps, Produk API, Aplikasi Developer, Developer, Kunci Konsumen, dll. saat runtime. Berikut adalah beberapa contohnya:

  • Gunakan kebijakan KeyValueMapOperations untuk mengakses informasi dari KeyValueMaps. Berikut contoh kode yang menunjukkan cara mengambil informasi dari KeyValueMap:
    <!-- /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, dll. di Proxy API, Anda dapat melakukan salah satu hal berikut:
    • Jika alur Proxy API Anda memiliki kebijakan VerifyAPIKey, Anda dapat mengakses informasi menggunakan variabel alur yang diisi sebagai bagian dari kebijakan ini. Berikut adalah kode contoh yang menunjukkan cara mengambil informasi nama dan created_by 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, dll. menggunakan kebijakan Akses Entitas dan Ekstrak Variabel :
      1. Mengambil profil DeveloperApp 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 DeveloperApp 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