使用 Azure Data Factory 從 REST 端點複製資料並轉換資料到 REST 端點

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的單一分析解決方案。 Microsoft Fabric 涵蓋從數據移動到數據科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版

本文概述如何使用 Azure Data Factory 中的「複製活動」,從 REST 端點複製資料和複製到 REST 端點。 本文以 Azure Data Factory 中的複製活動 為基礎,呈現複製活動的一般概觀。

此 REST 連接器、HTTP 連接器Web 資料表連接器之間的差異如下:

  • REST 連接器特別支援從 RESTful API 複製資料。
  • HTTP 連接器是通用的,可從任何 HTTP 端點擷取資料,例如下載檔案。 在使用此 REST 連接器之前,您可能會使用 HTTP 連接器從 RESTful API 複製資料,儘管 HTTP 連接器支援,但與 REST 連接器相比功能較少。
  • Web 資料表連接器從 HTML 網頁擷取資料表內容。

支援的功能

下列功能支援此 REST 連接器:

支援的功能 IR
複製活動 (來源/接收) (1) (2)
對應資料串 流 (來源/接收) (1)

(1) Azure 整合運行時間 (2) 自我裝載整合運行時間

如需支援作為來源/接收的數據存放區清單,請參閱 支持的數據存放區

具體而言,此一般 REST 連接器支援:

  • 使用 GET 或 POST 方法從 REST 端點複製資料,並使用 POSTPUTPATCH 方法將資料複製到 REST 端點。
  • 使用下列其中一項驗證來複製數據:匿名、基本、服務主體、OAuth2 用戶端認證系統指派的受控識別使用者指派的受控識別。
  • REST API 中的分頁。
  • 針對 REST 作為來源,依預設複製 REST JSON 回應,或使用架構對應加以剖析。 僅支援 JSON 中的響應承載。

提示

若要在 Data Factory 中設定 REST 連接器之前測試數據擷取要求,請了解標頭和本文需求的 API 規格。 您可以使用 Postman 或網頁瀏覽器等工具來驗證。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon Virtual Private Cloud 內,您必須設定 自我裝載整合運行時間 以連線到它。

如果您的資料存放區是受控雲端數據服務,您可以使用 Azure Integration Runtime。 如果存取僅限於防火牆規則中核准的IP,您可以將 Azure Integration Runtime IP 新增至允許清單。

您也可以使用 Azure Data Factory 中的受控虛擬網路整合運行時間 功能來存取內部部署網路,而不需安裝及設定自我裝載整合運行時間。

如需 Data Factory 所支援之網路安全性機制和選項的詳細資訊,請參閱 數據存取策略

開始使用

若要使用管線執行 複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 REST 鏈接服務

使用下列步驟,在 Azure 入口網站 UI 中建立 REST 鏈接服務。

  1. 流覽至 Azure Data Factory 或 Synapse 工作區中的 [管理] 索引標籤,然後選取 [鏈接服務],然後選取 [新增]:

  2. 搜尋 REST 並選取 REST 連接器。

    Select REST connector.

  3. 設定服務詳細數據、測試連線,並建立新的連結服務。

    Configure REST linked service.

連線 or 組態詳細數據

下列各節提供屬性的詳細數據,您可以用來定義 REST 連接器專屬的 Data Factory 實體。

連結服務屬性

REST 連結服務支援下列屬性:

屬性 描述 必要
type type 屬性必須設定為 RestService Yes
URL REST 服務的基底 URL。 Yes
enableServerCertificateValidation 連線到端點時,是否要驗證伺服器端 TLS/SSL 憑證。 No
(預設值為 true)
authenticationType 用來連線到 REST 服務的驗證類型。 允許的值為 Anonymous、Basic、AadServicePrincipalOAuth2ClientCredentialManagedServiceIdentity。 您也可以在屬性中 authHeaders 另外設定驗證標頭。 請參閱下方的對應章節,以分別取得更多屬性和範例。 Yes
authHeaders 用於驗證的其他 HTTP 要求標頭。
例如,若要使用 API 金鑰驗證,您可以將驗證類型選取為 「匿名」,並在標頭中指定 API 金鑰。
No
connectVia 用來 連接到數據存放區的 Integration Runtime 。 請從 必要條件一 節深入瞭解。 如果未指定,此屬性會使用預設的 Azure Integration Runtime。 No

如需不同的驗證類型,請參閱對應的各節以取得詳細數據。

使用基本身份驗證

authenticationType 屬性設定為 Basic。 除了上一節所述的泛型屬性之外,還指定下列屬性:

屬性 描述 必要
userName 用來存取 REST 端點的用戶名稱。 Yes
password 用戶的密碼( userName 值)。 將此欄位標示為 SecureString 類型,以安全地將其儲存在 Data Factory 中。 您也可以參考儲存在 Azure 金鑰保存庫 中的秘密。 Yes

範例

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "authenticationType": "Basic",
            "url" : "<REST endpoint>",
            "userName": "<user name>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用服務主體驗證

authenticationType 屬性設定為 AadServicePrincipal。 除了上一節所述的泛型屬性之外,還指定下列屬性:

屬性 描述 必要
servicePrincipalId 指定 Microsoft Entra 應用程式的用戶端識別碼。 Yes
servicePrincipalKey 指定 Microsoft Entra 應用程式的金鑰。 將此欄位標示為 SecureString,以安全地將其儲存在 Data Factory 中,或參考儲存在 Azure 金鑰保存庫 中的秘密。 Yes
tenant 指定應用程式所在的租使用者資訊(功能變數名稱或租使用者標識符)。 將滑鼠停留在 Azure 入口網站 右上角以擷取它。 Yes
aadResourceId 指定您要求授權的 Microsoft Entra 資源, 例如 https://management.core.windows.net Yes
azureCloudType 針對 [服務主體驗證],指定 Microsoft Entra 應用程式註冊的 Azure 雲端環境類型。
允許的值為 AzurePublicAzureChinaAzureUsGovernmentAzureGermany。 根據預設,會使用數據處理站的雲端環境。
No

範例

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "AadServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "value": "<service principal key>",
                "type": "SecureString"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用 OAuth2 用戶端認證驗證

authenticationType 屬性設定為 OAuth2ClientCredential。 除了上一節所述的泛型屬性之外,還指定下列屬性:

屬性 描述 必要
tokenEndpoint 要取得存取令牌之授權伺服器的令牌端點。 Yes
clientId 與應用程式相關聯的用戶端標識碼。 Yes
clientSecret 與應用程式相關聯的客戶端密碼。 將此欄位標示為 SecureString 類型,以安全地將其儲存在 Data Factory 中。 您也可以參考儲存在 Azure 金鑰保存庫 中的秘密。 Yes
範圍 (scope) 所需的存取範圍。 它描述將要求何種存取權。 No
resource 要求存取的目標服務或資源。 No

範例

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "enableServerCertificateValidation": true,
            "authenticationType": "OAuth2ClientCredential",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "SecureString",
                "value": "<client secret>"
            },
            "tokenEndpoint": "<token endpoint>",
            "scope": "<scope>",
            "resource": "<resource>"
        }
    }
}

使用系統指派的受控識別驗證

authenticationType 屬性設定為 ManagedServiceIdentity。 除了上一節所述的泛型屬性之外,還指定下列屬性:

屬性 描述 必要
aadResourceId 指定您要求授權的 Microsoft Entra 資源, 例如 https://management.core.windows.net Yes

範例

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "ManagedServiceIdentity",
            "aadResourceId": "<AAD resource URL e.g. https://management.core.windows.net>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用使用者指派的受控識別驗證

authenticationType 屬性設定為 ManagedServiceIdentity。 除了上一節所述的泛型屬性之外,還指定下列屬性:

屬性 描述 必要
aadResourceId 指定您要求授權的 Microsoft Entra 資源, 例如 https://management.core.windows.net Yes
credentials 將使用者指派的受控識別指定為認證物件。 Yes

範例

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "ManagedServiceIdentity",
            "aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }    
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用驗證標頭

此外,您可以設定驗證的要求標頭以及內建的驗證類型。

範例:使用 API 金鑰驗證

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint>",
            "authenticationType": "Anonymous",
            "authHeaders": {
                "x-api-key": {
                    "type": "SecureString",
                    "value": "<API key>"
                }
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

本節提供 REST 資料集所支持的屬性清單。

如需可用來定義資料集的完整區段和屬性清單,請參閱 數據集和鏈接服務

若要從 REST 複製資料,支援下列屬性:

屬性 描述 必要
type 數據集的 type 屬性必須設定為 RestResource Yes
relativeUrl 包含資料之資源的相對 URL。 未指定此屬性時,只會使用連結服務定義中指定的URL。 HTTP 連接器會從合併的 URL 複製數據: [URL specified in linked service]/[relative URL specified in dataset] No

如果您要在數據集中設定requestMethodrequestBodyadditionalHeaderspaginationRules ,則仍依目前支援,同時建議您在活動中繼續使用新的模型。

範例:

{
    "name": "RESTDataset",
    "properties": {
        "type": "RestResource",
        "typeProperties": {
            "relativeUrl": "<relative url>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<REST linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

複製活動屬性

本節提供 REST 來源和接收所支持的屬性清單。

如需可用來定義活動的區段和屬性完整清單,請參閱 管線

REST 作為來源

複製活動 來源 區段中支援下列屬性:

屬性 描述 必要
type 複製 活動來源的 type 屬性必須設定為 RestSource Yes
requestMethod HTTP 方法。 允許的值為 GET (預設值) 和 POST No
additionalHeaders 其他 HTTP 要求標頭。 No
requestBody HTTP 要求的主體。 No
paginationRules 撰寫下一頁要求的分頁規則。 如需詳細數據,請參閱分頁支援一節。 No
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時,而不是讀取響應數據的逾時。 默認值為 00:01:40 No
requestInterval 傳送下一頁要求之前要等候的時間。 預設值為 00:00:01 No

注意

REST 連接器會忽略 中指定的 additionalHeaders任何「接受」標頭。 由於 REST 連接器僅支援 JSON 中的回應,因此會自動產生的 Accept: application/json標頭。
分頁不支援物件陣列,因為回應本文。

範例 1:搭配分頁使用 Get 方法

"activities":[
    {
        "name": "CopyFromREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<REST input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "RestSource",
                "additionalHeaders": {
                    "x-user-defined": "helloworld"
                },
                "paginationRules": {
                    "AbsoluteUrl": "$.paging.next"
                },
                "httpRequestTimeout": "00:01:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

範例 2:使用 Post 方法

"activities":[
    {
        "name": "CopyFromREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<REST input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "RestSource",
                "requestMethod": "Post",
                "requestBody": "<body for POST REST request>",
                "httpRequestTimeout": "00:01:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

REST 作為接收

複製活動 接收 區段中支援下列屬性:

屬性 描述 必要
type 複製 活動接收的 type 屬性必須設定為 RestSink Yes
requestMethod HTTP 方法。 允許的值為 POST (預設值)、 PUTPATCH No
additionalHeaders 其他 HTTP 要求標頭。 No
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時,而不是寫入數據的逾時。 默認值為 00:01:40 No
requestInterval 不同要求之間的時間間隔,以毫秒為單位。 要求間隔值應該是介於 [10, 60000] 之間的數位。 No
httpCompressionType 使用最佳壓縮層級傳送數據時要使用的 HTTP 壓縮類型。 允許的值為 nonegzip No
writeBatchSize 每個批次要寫入 REST 接收的記錄數目。 預設值為 10000。 No

作為接收的 REST 連接器可與接受 JSON 的 REST API 搭配運作。 數據會以下列模式以 JSON 傳送。 視需要,您可以使用複製活動 架構對應 來重塑源數據,以符合 REST API 的預期承載。

[
    { <data object> },
    { <data object> },
    ...
]

範例:

"activities":[
    {
        "name": "CopyToREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<REST output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "RestSink",
                "requestMethod": "POST",
                "httpRequestTimeout": "00:01:40",
                "requestInterval": 10,
                "writeBatchSize": 10000,
                "httpCompressionType": "none",
            },
        }
    }
]

對應數據流屬性

整合數據集和內嵌數據集的數據流支援 REST。

來源轉換

屬性 描述 必要
requestMethod HTTP 方法。 允許的值為 GETPOST Yes
relativeUrl 包含資料之資源的相對 URL。 未指定此屬性時,只會使用連結服務定義中指定的URL。 HTTP 連接器會從合併的 URL 複製數據: [URL specified in linked service]/[relative URL specified in dataset] No
additionalHeaders 其他 HTTP 要求標頭。 No
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時,而不是寫入數據的逾時。 默認值為 00:01:40 No
requestInterval 不同要求之間的時間間隔,以毫秒為單位。 要求間隔值應該是介於 [10, 60000] 之間的數位。 No
QueryParameters。request_query_parameter OR QueryParameters['request_query_parameter'] “request_query_parameter” 是使用者定義的,它會參考下一個 HTTP 要求 URL 中的一個查詢參數名稱。 No

接收轉換

屬性 描述 必要
additionalHeaders 其他 HTTP 要求標頭。 No
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時,而不是寫入數據的逾時。 默認值為 00:01:40 No
requestInterval 不同要求之間的時間間隔,以毫秒為單位。 要求間隔值應該是介於 [10, 60000] 之間的數位。 No
httpCompressionType 使用最佳壓縮層級傳送數據時要使用的 HTTP 壓縮類型。 允許的值為 nonegzip No
writeBatchSize 每個批次要寫入 REST 接收的記錄數目。 預設值為 10000。 No

您可以設定 delete、insert、update 和 upsert 方法,以及要傳送至 CRUD 作業之 REST 接收的相對數據列數據。

Data flow REST sink

範例數據流腳本

請注意,在接收之前使用改變數據列轉換,指示 ADF 使用 REST 接收採取的動作類型。 也就是插入、更新、更新、插入、刪除。

AlterRow1 sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:true,
	rowRelativeUrl: 'periods',
	insertHttpMethod: 'PUT',
	deleteHttpMethod: 'DELETE',
	upsertHttpMethod: 'PUT',
	updateHttpMethod: 'PATCH',
	timeout: 30,
	requestFormat: ['type' -> 'json'],
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> sink1

分頁支援

通常,當您從 REST API 複製數據時,REST API 會根據合理的數位限制其單一要求的響應承載大小:雖然若要傳回大量數據,它會將結果分割成多個頁面,並要求呼叫端傳送連續要求以取得結果的下一頁。 通常,一頁的要求是動態的,並由上一頁回應傳回的信息所組成。

此泛型 REST 連接器支援下列分頁模式:

  • 下一個要求的絕對或相對 URL = 目前響應主體中的屬性值
  • 下一個要求的絕對或相對 URL = 目前響應標頭中的標頭值
  • 下一個要求的查詢參數 = 目前響應主體中的屬性值
  • 下一個要求的查詢參數 = 目前響應標頭中的標頭值
  • 下一個要求的標頭 = 目前響應主體中的屬性值
  • 下一個要求的標頭 = 目前響應標頭中的標頭值

分頁規則 會定義為數據集中的字典,其中包含一或多個區分大小寫的索引鍵/值組。 組態將用來從第二頁開始產生要求。 連接器會在取得 HTTP 狀態代碼 204(無內容)或 “paginationRules” 中的任何 JSONPath 表達式傳回 Null 時停止逐一查看。

分頁規則中支援的索引鍵

關鍵 描述
AbsoluteUrl 指出發出下一個要求的 URL。 它可以是 絕對 URL 或相對 URL
QueryParameters。request_query_parameter OR QueryParameters['request_query_parameter'] “request_query_parameter” 是使用者定義的,它會參考下一個 HTTP 要求 URL 中的一個查詢參數名稱。
頭。 request_header OR 標頭['request_header'] “request_header” 是使用者定義的,它會參考下一個 HTTP 要求中的一個標頭名稱。
EndCondition:end_condition “end_condition” 是使用者定義的,表示將在下一個 HTTP 要求中結束分頁循環的條件。
MaxRequestNumber 表示分頁要求數目上限。 將它保留為空白表示沒有限制。
SupportRFC5988 根據預設,如果未定義分頁規則,這會設定為 true。 您可以將 設定 supportRFC5988 為 false 或從文稿中移除此屬性,以停用此規則。

分頁規則中支援的值

Description
頭。 response_header OR 標頭['response_header'] “response_header” 是使用者定義的,其參考目前 HTTP 回應中的一個標頭名稱,其值將用來發出下一個要求。
以 “$” 開頭的 JSONPath 表達式(代表響應主體的根目錄) 回應主體應該只包含一個 JSON 物件,而且不支持回應本文的物件陣列。 JSONPath 表達式應該會傳回單一基本值,用來發出下一個要求。

注意

對應資料流中的分頁規則與複製活動中的分頁規則不同,在下列方面:

  1. 對應數據流不支援範圍。
  2. [''] 對應數據流不支援。 請改用 {} 來逸出特殊字元。 例如, body.{@odata.nextLink}其 JSON 節點 @odata.nextLink 包含特殊字元 .
  3. 對應數據流支持結束條件,但條件語法與複製活動中的條件語法不同。 body 是用來指出回應本文, $而不是 。 header 是用來指出回應標頭, headers而不是 。 以下是顯示此差異的兩個範例:
    • 範例 1:
      複製活動:“EndCondition:$.data”: “Empty”
      對應數據流: “EndCondition:body.data”: “Empty”
    • 範例 2:
      複製活動:“EndCondition:headers.complete”: “Exist”
      對應數據流: “EndCondition:header.complete”: “Exist”

分頁規則範例

本節提供分頁規則設定的範例清單。

範例 1:QueryParameters 中的變數

此範例提供組態步驟,以傳送多個變數位於QueryParameters中的要求。

多個要求:

baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0,
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
...... 
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=10000

步驟 1:在基底 URL 或相對 URL輸入sysparm_offset={offset},如下列螢幕快照所示:

Screenshot showing one configuration to send multiple requests whose variables are in Query Parameters.

Screenshot showing another configuration to send multiple requests whose variables are in Query Parameters.

步驟 2:將分頁規則設定為選項 1 或選項 2:

  • Option1: “QueryParameters.{offset}“ : ”RANGE:0:10000:1000”

  • Option2: “AbsoluteUrl.{offset}“ : ”RANGE:0:10000:1000”

AbsoluteUrl 中的範例 2:Variables

此範例提供設定步驟,以傳送多個變數在 AbsoluteUrl 中的要求。

多個要求:

BaseUrl/api/now/table/t1
BaseUrl/api/now/table/t2
...... 
BaseUrl/api/now/table/t100

步驟 1:在連結服務組態頁面的基底 URL數據集連接窗格中的相對 URL 中輸入{id}

Screenshot showing one configuration to send multiple requests whose variables are in Absolute Url.

Screenshot showing another configuration to send multiple requests whose variables are in Absolute Url.

步驟 2:將分頁規則設定“AbsoluteUrl.{id}“ :”RANGE:1:100:1”。

標頭中的範例 3:變數

此範例提供組態步驟,以傳送多個變數位於 Headers 中的要求。

多個要求:
RequestUrl: https://example/table
要求 1: Header(id->0)
要求 2: Header(id->10)
......
要求 100: Header(id->100)

步驟 1:其他標頭中的輸入{id}

步驟 2:將分頁規則設定“Headers.{id}“ : ”RARNGE:0:100:10”。

Screenshot showing the pagination rule to send multiple requests whose variables are in Headers.

範例 4:變數位於 AbsoluteUrl/QueryParameters/Headers 中,結束變數未預先定義,且結束條件是以響應為基礎

此範例提供組態步驟,以傳送多個要求,其變數位於 AbsoluteUrl/QueryParameters/Headers 中,但未定義結束變數。 針對不同的回應,範例 4.1-4.6 會顯示不同的結束條件規則設定。

多個要求:

Request 1: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0, 
Request 2: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
Request 3: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=2000,
...... 

在這裡範例中遇到的兩個回應:

回應 1:

{
    Data: [
        {key1: val1, key2: val2
        },
        {key1: val3, key2: val4
        }
    ]
}

回應 2:

{
    Data: [
        {key1: val5, key2: val6
        },
        {key1: val7, key2: val8
        }
    ]
}

步驟 1:將分頁規則的範圍設定為範例 1,並將範圍的結尾保留為 “AbsoluteUrl.{offset}“: ”RANGE:0::1000”。

步驟 2:根據不同的上次回應設定不同的結束條件規則。 請參閱下列範例:

  • 範例 4.1:分頁會在回應中特定節點的值空白時結束

    REST API 會傳回下列結構中的最後一個回應:

    {
        Data: []
    }
    

    將結束條件規則設定為 「EndCondition:$.data」: “Empty” ,以在回應中特定節點的值是空的時結束分頁。

    Screenshot showing the End Condition setting for Example 4.1.

  • 範例 4.2:分頁會在回應中特定節點的值不存在時結束

    REST API 會傳回下列結構中的最後一個回應:

    {}
    

    將結束條件規則設定為 「EndCondition:$.data」: “NonExist” ,以在回應中特定節點的值不存在時結束分頁。

    Screenshot showing the End Condition setting for Example 4.2.

  • 範例 4.3:分頁會在回應中特定節點的值存在時結束

    REST API 會傳回下列結構中的最後一個回應:

    {
        Data: [
            {key1: val991, key2: val992
            },
            {key1: val993, key2: val994
            }
        ],
                Complete: true
    }
    

    將結束條件規則設定為 「EndCondition:$。完成“:當回應中特定節點的值存在時,「存在」 以結束分頁。

    Screenshot showing the End Condition setting for Example 4.3.

  • 範例 4.4:分頁會在回應中特定節點的值是用戶定義的 const 值時結束

    REST API 會傳回下列結構中的回應:

    {
        Data: [
            {key1: val1, key2: val2
            },
            {key1: val3, key2: val4
            }
        ],
                Complete: false
    }
    

    ......

    最後一個回應位於下列結構中:

    {
        Data: [
            {key1: val991, key2: val992
            },
            {key1: val993, key2: val994
            }
        ],
                Complete: true
    }
    

    將結束條件規則設定為 「EndCondition:$。Complete“: ”Const:true“ 會在回應中特定節點的值是使用者定義的 const 值時結束分頁。

    Screenshot showing the End Condition setting for Example 4.4.

  • 範例 4.5:當標頭索引鍵的值等於用戶定義的 const 值時,分頁結束

    REST API 回應中的標頭金鑰會顯示在下列結構中:

    回應標頭 1: header(Complete->0)
    ......
    上次回應標頭: header(Complete->1)

    將結束條件規則設定為 「EndCondition:headers」。。Complete“: ”Const:1“ 會在響應中標頭索引鍵的值等於使用者定義的 const 值時結束分頁。

    Screenshot showing the End Condition setting for Example 4.5.

  • 範例 4.6:分頁會在響應標頭中的索引鍵存在時結束

    REST API 回應中的標頭金鑰會顯示在下列結構中:

    回應標頭 1: header()
    ......
    上次回應標頭: header(CompleteTime->20220920)

    將結束條件規則設定為 「EndCondition:headers」。。CompleteTime“: ”Exists“ ,以在響應標頭中存在索引鍵時結束分頁。

    Screenshot showing the End Condition setting for Example 4.6.

範例 5:設定結束條件以避免在未定義範圍規則時無休止的要求

本範例提供設定步驟,以在不使用範圍規則時傳送多個要求。 您可以設定結束條件來參考範例 4.1-4.6,以避免無休止的要求。 REST API 會傳回下列結構的回應,在此情況下,下一頁的 URL 會 以 paging.next 表示。

{
    "data": [
        {
            "created_time": "2017-12-12T14:12:20+0000",
            "name": "album1",
            "id": "1809938745705498_1809939942372045"
        },
        {
            "created_time": "2017-12-12T14:14:03+0000",
            "name": "album2",
            "id": "1809938745705498_1809941802371859"
        },
        {
            "created_time": "2017-12-12T14:14:11+0000",
            "name": "album3",
            "id": "1809938745705498_1809941879038518"
        }
    ],
    "paging": {
        "cursors": {
            "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
            "before": "NDMyNzQyODI3OTQw"
        },
        "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
    }
}
...

最後一個回應是:

{
    "data": [],
    "paging": {
        "cursors": {
            "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
            "before": "NDMyNzQyODI3OTQw"
        },
        "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next": "Same with Last Request URL"
    }
}

步驟 1:將分頁規則設定“AbsoluteUrl”:“$.paging.next”。

步驟 2:如果在 next 最後一個回應中一律與最後一個要求 URL 相同,而不是空白,則會傳送無休止的要求。 結束條件可用來避免無休止的要求。 因此,設定結束條件規則是指範例 4.1-4.6。

範例 6:設定最大要求號碼以避免無休止的要求

設定 MaxRequestNumber 以避免無休止的要求,如下列螢幕快照所示:

Screenshot showing the Max Request Number setting for Example 6.

範例 7:預設支援 RFC 5988 分頁規則

後端會根據標頭中的 RFC 5988 樣式連結自動取得下一個 URL。

Screenshot showing samples of the http header that complies with R F C 5988.

提示

如果您不想要啟用此預設分頁規則,您可以設定 supportRFC5988false 或只是在腳本中刪除它。

Screenshot showing how to disable R F C 5988 setting for Example 7.

範例 8:下一個要求 URL 是在對應數據流中使用分頁時來自響應主體

本範例說明如何在下一個要求 URL 來自回應本文時,設定對應數據流中的分頁規則和結束條件規則。

回應架構如下所示:

Screenshot showing the response schema of Example 8.

分頁規則應設定為下列螢幕快照:

Screenshot showing how to set the pagination rule for Example 8.

根據預設,分頁會在本文時停止。{@odata.nextLink}** 為 null 或空白。

但是,如果上一個響應主體中@odata.nextLink 的值等於最後一個要求 URL,則會導致無休止的迴圈。 若要避免此條件,請定義結束條件規則。

  • 如果 最後一個回應中的 Value的,則可以如下所示設定結束條件規則:

    Screenshot showing setting the end condition rule when the last response is empty.

  • 如果響應標頭中完整索引鍵的值等於 true 表示分頁結尾,則可以如下所示設定結束條件規則:

    Screenshot showing setting the end condition rule when the complete key in the response header equals to true indicates the end of pagination.

範例 9:回應格式為 XML,下一個要求 URL 是在對應數據流中使用分頁時,來自響應主體

本範例會指出當回應格式為 XML,而下一個要求 URL 來自回應本文時,如何在對應數據流中設定分頁規則。 如下列螢幕快照所示,第一個URL是 https://< user.dfs.core.windows.NET/bugfix/test/movie_1.xml>

Screenshot showing the response format is X M L and the next request U R L is from the response body.

回應架構如下所示:

Screenshot showing the response schema of Example 9.

分頁規則語法與範例 8 相同,在此範例中應該如下所示:

Screenshot showing setting the pagination rule for Example 9.

以目前方式導出 JSON 回應

您可以使用此 REST 連接器,依目前方式將 REST API JSON 回應匯出至各種以檔案為基礎的存放區。 若要達成這類架構無關的複製,請略過複製活動中數據集中的「結構」(也稱為 架構)區段和架構對應。

結構描述對應

若要將數據從 REST 端點複製到表格式接收,請參閱 架構對應

如需複製活動支援做為 Azure Data Factory 中來源和接收的數據存放區清單,請參閱 支援的數據存放區和格式