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, developer aplikasi, developer, kunci konsumen, dan seterusnya
  • Mengambil informasi tentang entity ini

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

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

Misalnya, Anda dapat menyimpan informasi berikut dalam KVM 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 pada runtime untuk memungkinkan perilaku dinamis dalam kebijakan atau kode kustom dalam Apigee.

Anti-pola

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

  • Menggunakan API Apigee untuk mengakses informasi tentang entity seperti KVM, OAuth token akses atau untuk tujuan lain dari proxy API menyebabkan dependensi pada Pengelolaan Server.
  • Server Pengelolaan bukan bagian dari komponen runtime Apigee dan karena itu, 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-{i>cache<i} untuk jangka waktu yang lebih lama, jadi Anda mungkin dapat langsung melihat data terbaru di proxy API jika Anda melakukan operasi tulis dan baca di dalam waktu singkat.
  • Meningkatkan hop jaringan saat runtime.

Pada 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 Apigee API 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 Apigee harus disimpan secara lokal atau di beberapa penyimpanan yang aman seperti KVM terenkripsi.
  • 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.

Praktik terbaik

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

  • Gunakan kebijakan KeyValueMapOperations untuk mengakses informasi dari KVM. Berikut 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 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 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 AccessEntity dan ExtractVariables kebijakan:
      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