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 “management API” yang menawarkan layanan seperti:

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

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

Terkadang, kami mungkin perlu menggunakan satu atau beberapa layanan ini dari Proxy API saat runtime. Hal ini karena entity seperti KeyValueMaps, Token Akses OAuth, Produk API, Aplikasi Developer, Developer, Kunci Konsumen, dll. berisi informasi yang berguna dalam bentuk key-value pair, atribut khusus, 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 pada runtime untuk mengaktifkan perilaku dinamis dalam kebijakan atau kode kustom dalam Apigee Edge.

Antipola

API pengelolaan lebih disarankan dan berguna untuk tugas administratif serta tidak boleh digunakan untuk menjalankan logika runtime apa pun di alur Proxy API. Hal ini dikarenakan:

  • Penggunaan API pengelolaan untuk mengakses informasi tentang entity seperti KeyValueMaps, Token Akses OAuth, atau untuk tujuan lain dari Proxy API akan menyebabkan dependensi pada Server Pengelolaan.
  • Server Pengelolaan bukan bagian dari komponen runtime Edge sehingga mungkin tidak memiliki ketersediaan tinggi.
  • Server Pengelolaan juga mungkin tidak disediakan dalam jaringan atau pusat data yang sama, sehingga dapat menyebabkan latensi jaringan saat runtime.
  • Entri dalam server pengelolaan di-cache dalam jangka waktu yang lebih lama, sehingga kami mungkin tidak dapat langsung melihat data terbaru di Proxy API jika melakukan operasi tulis dan baca dalam waktu singkat.
  • Meningkatkan hop jaringan saat runtime.

Pada contoh kode di bawah ini, panggilan API pengelolaan dibuat 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, kode JavaScript yang memanggil panggilan API pengelolaan akan gagal. Hal ini kemudian menyebabkan permintaan API gagal.

Dampak

  • Memperkenalkan dependensi tambahan pada Server Pengelolaan selama runtime. Kegagalan dalam server Pengelolaan akan memengaruhi panggilan API.
  • Kredensial pengguna untuk API pengelolaan harus disimpan secara lokal atau di penyimpanan aman seperti Encrypted KVM.
  • Implikasi performa karena pemanggilan layanan pengelolaan melalui jaringan.
  • Nilai yang diperbarui mungkin tidak langsung terlihat 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, DeveloperApps, Developers, Kunci Konsumen, dll. saat runtime. Berikut adalah beberapa contohnya:

  • Gunakan kebijakan KeyValueMapOperations untuk mengakses informasi dari KeyValueMaps. Berikut ini 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 tindakan berikut:
    • Jika alur Proxy API 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 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 tidak memiliki kebijakan VerifyAPIKey, Anda dapat mengakses profil Produk API, Aplikasi Developer, dll. menggunakan kebijakan Entity Akses dan Ekstrak Variabel:
      1. Ambil 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