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, Developer Aplikasi, 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 bisa dipanggil dengan mudah dengan bantuan API pengelolaan sederhana panggilan telepon.

Terkadang kami mungkin perlu menggunakan satu atau beberapa layanan ini dari Proxy API saat runtime. Ini adalah karena entitas seperti KeyValueMaps, Token Akses OAuth, Produk API, Developer, Consumer Key, dll. berisi informasi yang berguna dalam bentuk key-value pair, atau sebagai bagian dari profilnya.

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

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

Anda juga 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 disarankan dan berguna untuk tugas administratif, serta tidak boleh digunakan untuk menjalankan logika runtime apa pun dalam alur Proxy API. Hal ini dikarenakan:

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

Pada contoh kode di bawah, panggilan API pengelolaan 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, 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. Setiap kegagalan di Server pengelolaan akan memengaruhi panggilan API.
  • Kredensial pengguna untuk API pengelolaan harus disimpan secara lokal atau di beberapa 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 pengelolaan server web.

Praktik terbaik

Ada cara yang lebih efektif untuk mengambil informasi dari entity seperti KeyValueMaps, API Produk, Aplikasi Developer, Developer, Kunci Konsumen, dll. saat runtime. Berikut adalah beberapa contohnya:

  • Gunakan kebijakan KeyValueMapOperations untuk mengakses informasi dari KeyValueMaps. Berikut kode contoh 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 tersebut menggunakan variabel alur yang diisi sebagai bagian dari kebijakan ini. Berikut adalah kode contoh yang menunjukkan cara mengambil nama dan informasi create_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, dll. menggunakan Entitas Akses dan Mengekstrak Variabel kebijakan:
      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