Phản mẫu: Gọi lệnh gọi API quản lý từ một Proxy API

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Edge có một tiện ích mạnh mẽ có tên là "API quản lý", cung cấp các dịch vụ như:

  • Triển khai hoặc huỷ triển khai các proxy API
  • Định cấu hình máy chủ ảo, kho khoá và kho tin cậy, v.v.
  • Tạo, xoá và/hoặc cập nhật các thực thể như KeyValueMaps, Sản phẩm API, Nhà phát triển Ứng dụng, Nhà phát triển, Khoá người dùng, v.v.
  • Truy xuất thông tin về các thực thể này

Bạn có thể truy cập vào các dịch vụ này thông qua thành phần có tên là Máy chủ quản lý trong Nền tảng Apigee Edge. Các dịch vụ này có thể được gọi dễ dàng với sự trợ giúp của API quản lý đơn giản cuộc gọi.

Đôi khi, chúng tôi có thể cần phải sử dụng một hoặc nhiều dịch vụ trong số này qua các proxy API trong thời gian chạy. Đây là vì các thực thể như KeyValueMaps, Mã truy cập OAuth, Sản phẩm API, Ứng dụng của nhà phát triển, Nhà phát triển, Khoá người dùng, v.v. chứa thông tin hữu ích dưới dạng cặp khoá-giá trị, hoặc như một phần của hồ sơ.

Ví dụ: bạn có thể lưu trữ thông tin sau trong KeyValueMap để làm cho thông tin an toàn hơn và có thể truy cập trong thời gian chạy:

  • URL mục tiêu phụ trợ
  • Thuộc tính môi trường
  • Thông tin đăng nhập bảo mật của hệ thống phụ trợ hoặc hệ thống của bên thứ ba

Tương tự như vậy, có thể bạn muốn nhận danh sách Sản phẩm API hoặc địa chỉ email của nhà phát triển trong thời gian chạy. Thông tin này được cung cấp trong hồ sơ Ứng dụng của nhà phát triển.

Tất cả thông tin này có thể được sử dụng hiệu quả trong thời gian chạy để cho phép hành vi linh động trong các chính sách hoặc mã tuỳ chỉnh trong Apigee Edge.

Cấu trúc phản mẫu

API quản lý được ưu tiên và hữu ích cho công việc quản trị nên không nên dùng cho thực hiện bất kỳ logic thời gian chạy nào trong luồng API Proxy. Điều này là do:

  • Sử dụng API quản lý để truy cập vào thông tin về các thực thể (chẳng hạn như KeyValueMaps, OAuth) Access Tokens hoặc cho bất kỳ mục đích nào khác từ API Proxies sẽ dẫn đến sự phụ thuộc vào Management Máy chủ.
  • Máy chủ quản lý không phải là một phần của thành phần thời gian chạy Edge và do đó, chúng có thể không có sẵn.
  • Máy chủ quản lý cũng có thể không được cấp trong cùng một mạng hoặc trung tâm dữ liệu, do đó có thể gây ra độ trễ mạng trong thời gian chạy.
  • Các mục nhập trong máy chủ quản lý được lưu vào bộ nhớ đệm trong khoảng thời gian dài hơn, vì vậy chúng tôi có thể không xem được ngay dữ liệu mới nhất trong Proxy API nếu chúng ta thực hiện ghi và đọc trong một trong một khoảng thời gian ngắn.
  • Tăng số bước nhảy mạng trong thời gian chạy.

Trong mã mẫu bên dưới, lệnh gọi API quản lý được thực hiện thông qua mã JavaScript tuỳ chỉnh để truy xuất thông tin từ KeyValueMap:

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

Nếu máy chủ quản lý không khả dụng thì mã JavaScript gọi API quản lý không gọi được. Sau đó, điều này sẽ khiến yêu cầu API không thành công.

Tác động

  • Giới thiệu phần phụ thuộc bổ sung trên Máy chủ quản lý trong thời gian chạy. Mọi lỗi trong Các máy chủ quản lý sẽ ảnh hưởng đến các lệnh gọi API.
  • Thông tin đăng nhập của người dùng cho API quản lý cần được lưu trữ trên máy hoặc trong một cửa hàng bảo mật nào đó chẳng hạn như KVM được mã hoá.
  • Ảnh hưởng đến hiệu suất do gọi dịch vụ quản lý qua mạng.
  • Có thể không thấy các giá trị đã cập nhật ngay lập tức do thời gian hết hạn bộ nhớ đệm lâu hơn trong máy chủ quản lý.

Phương pháp hay nhất

Có nhiều cách hiệu quả hơn để truy xuất thông tin từ các thực thể, chẳng hạn như KeyValueMaps, API Sản phẩm, Ứng dụng của nhà phát triển, Nhà phát triển, Khoá người tiêu dùng, v.v. trong thời gian chạy. Dưới đây là một số ví dụ:

  • Hãy sử dụng chính sách KeyValueMapOperations để truy cập vào thông tin từ KeyValueMaps. Sau đây là mã mẫu cho biết cách truy xuất thông tin qua 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>
    
  • Để truy cập thông tin về Sản phẩm API, Ứng dụng dành cho nhà phát triển, Nhà phát triển, Khoá người dùng, v.v. trong Proxy API, bạn có thể thực hiện một trong những thao tác sau:
    • Nếu luồng Proxy API của bạn có chính sách VerifyAPIKey, thì bạn có thể truy cập thông tin bằng cách sử dụng các biến luồng được điền sẵn trong chính sách này. Dưới đây là mã mẫu cho thấy cách truy xuất tên và thông tin created_by của Ứng dụng dành cho nhà phát triển bằng 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"));
      
    • Nếu luồng Proxy API của bạn không có chính sách VerifyAPIKey, thì bạn có thể truy cập vào hồ sơ của các Sản phẩm API, Ứng dụng của nhà phát triển, v.v. bằng cách sử dụng Thực thể truy cập và Biến trích xuất chính sách của Google:
      1. Truy xuất hồ sơ của DeveloperApp bằng chính sách 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. Trích xuất appId từ DeveloperApp bằng chính sách 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>
        

Tài liệu đọc thêm