附註:

使用 OCI API 閘道、函數及可觀察性來驗證 JSON 內容及監控 API 標頭和主體

簡介

當我們開發分散式應用系統時 (特別是在以微服務為基礎的架構中),我們希望元件在執行時能夠順利調整及執行。它們具有非常複雜的架構、執行其他元件、執行其他元件的元件,以及其他元件在無限數目的無窮呼叫中。

規劃如何發展每一項都是非常重要的任務。您可以透過 Oracle Cloud Infrastructure API Gateway (OCI API Gateway) 顯示建立在 Kubernetes 叢集上的微服務。有一系列設施,例如執行呼叫驗證和授權、資料驗證和呼叫最佳化等,只需幾個名稱即可。現有方法不足以解決需求時,也可以使用 OCI Functions 執行呼叫,以建立個人化認證和授權機制。

本教學課程將說明如何使用自訂機制來驗證部分使用案例,例如:

儘管這是 OCI API 閘道中認證和授權的機制,但它仍有助於滿足其他需求,例如:

目標

必要條件

作業 1:設定 OCI 可觀察性

  1. 在您的 OCI 租用戶中建立日誌,以從您的函數擷取日誌。瀏覽至可觀測性與管理,然後在 OCI 主控台中選取日誌

    logging-1

  2. 按一下建立自訂日誌

    logging-2

  3. 自訂日誌名稱欄位中輸入名稱,然後選擇適當的區間日誌群組

    logging-3 - 記錄日誌 3

注意:擷取日誌的 OCID 很重要,您的程式碼需要這麼做。

logging-4

作業 2:建立 OCI 函數以從 API 要求擷取 HEADER 和 BODY

若要執行下列步驟,請從 function.zip 下載程式碼。

瞭解程式碼

您可以在 function.zip 找到此程式碼。

注意:如果您不知道如何開發函數並在 API 閘道中呼叫函數,請參閱使用 API 閘道呼叫函數

設定 OCI 的 SDK 認證

您必須先設定組態檔並將您的 OCI 私密金鑰和指紋與函數放在一起,才能將其部署到 OCI。您必須在 Oracle Cloud Infrastructure Command Line Interface (OCI CLI) 安裝與組態上產生 config私密金鑰檔案。

若要安裝並設定您的 OCI CLI,請參閱安裝 OCI CLI 。此安裝與配置將為您產生兩個檔案。尋找 configprivate key 檔案 (預設為 oci_api_key.pem)。資料夾路徑將在安裝指示中通知。

代碼 -2

下載 function.zip 以查看程式碼、組態檔及私密金鑰。以您的 OCI CLI 檔案取代組態檔和私密金鑰檔。

建置及部署 OCI 函數

在此步驟中,我們將需要使用 OCI CLI 來建立 OCI 函數,並將程式碼部署到您的租用戶中。若要建立 OCI 函數,請參閱 OCI Functions QuickStart 並搜尋 Python 選項。您將需要使用此資訊來建立函數:

請記住您部署函數的區間。您需要此資訊來設定 OCI API 閘道部署。

作業 3:設定 API 閘道中的 OCI 函數

讓我們部署您的 API 並與您的 OCI 函數整合,以驗證要求參數 (標頭和 BODY) 並傳送至 OCI 可觀察性。如果您不知道如何在 OCI API 閘道中顯示後端,請參閱 OCI API 閘道:設定、建立及部署 API

  1. 開啟編輯建置

    配置 -apigw-1

  2. 按一下認證段落。

    配置 -apigw-2

  3. 按一下單一認證,然後選取授權器函數

    配置 -apigw-2a

  4. 選擇函數區間 (在您部署函數的位置),選取 fn_apigw_json 應用程式和函數 python-json-header

    配置 -apigw-2b

  5. 設定「函數引數」以擷取 HEADERBODY 。擷取名為 headerheader2HEADER ,以及將命名為 bodyBODY 內容。

    配置 -apigw-2c

  6. 按一下路由並設定標頭轉換。此組態是選擇性的,只是查看要求資料 (HEADER 和 BODY 內容) 的回應內容或要求所產生的錯誤。除錯您的函數會很有用。

    配置 -apigw-3

作業 4:測試您的請求

注意:在您的「API 建置」中,如果您設定「授權者函數」並設定「函數引數」,就會啟用「函數」引數的快取。您可以建立要快取的資料類型。您可以設定查詢參數或標頭的快取,但無法設定主體內容。

我們可以測試 API 要求。進行主體陣列中只有一個項目的測試。

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
    --header 'Content-Type: text/plain' \
    --header 'header: header' \
    --header 'header2: header2' \
    --header 'header3: header3' \
    --data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

header3 已傳送但顯示在日誌中,因為未在 OCI API 閘道中將其設定為函數引數BODY JSON 陣列上只有一個項目,因此它是一個有效的授權要求。

測試 -1

讓我們在陣列和測試上再放置一個項目。

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
--header 'Content-Type: text/plain' \
--header 'header: header' \
--header 'header2: header2' \
--header 'header3: header3' \
--data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}, {"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

測試 -2

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center