Você pode usar o mode=draft
parâmetro de consulta no [Flow Service API] (https://www.adobe.io/experience-platform-apis/references/flow-service/) para definir o Flow Service entidades como suas conexões básicas, conexões de origem, conexões de destino e fluxos de dados para um estado de rascunho.
Os rascunhos podem ser atualizados posteriormente com novas informações e publicados quando estiverem prontos, usando o op=publish
parâmetro de consulta.
Este tutorial fornece etapas sobre como definir seus Flow Service entidades a um estado de rascunho e permitem pausar e salvar seus workflows para conclusão posteriormente.
Este tutorial requer que você tenha uma compreensão funcional dos seguintes componentes do Adobe Experience Platform:
Para obter informações sobre como fazer chamadas para APIs da Platform com êxito, consulte o manual em introdução às APIs da Platform.
Você também deve verificar se a ID de especificação da conexão e a ID de especificação de fluxo correspondente da origem que você está usando estão ativadas para o modo de rascunho.
curl -X GET \
'https://platform.adobe.io/data/foundation/flowservice/connectionSpecs/be5ec48c-5b78-49d5-b8fa-7c89ec4569b8' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Uma resposta bem-sucedida retorna as informações de especificação da conexão para a sua origem. Para verificar se o modo de rascunho é compatível com sua origem, verifique se items[0].attributes.isDraftModeSupported
tem um valor de true
.
{
"items": [
{
"id": "be5ec48c-5b78-49d5-b8fa-7c89ec4569b8",
"name": "azure-file-storage",
"providerId": "0ed90a81-07f4-4586-8190-b40eccef1c5a",
"version": "1.0",
"authSpec": [
{
"name": "Basic Authentication",
"type": "basicAuthentication",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "defines auth params",
"properties": {
"host": {
"type": "string",
"description": "Specifies the Azure File Storage endpoint."
},
"userid": {
"type": "string",
"description": "Specify the user to access the Azure File Storage."
},
"password": {
"type": "string",
"description": "Specify the storage access key",
"format": "password"
}
},
"required": [
"host",
"userid",
"password"
]
}
}
],
"sourceSpec": {
"name": "CloudStorage",
"type": "CloudStorage",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "input path for copying files, can be a folder path, file path or a wildcard pattern"
},
"recursive": {
"type": "boolean",
"description": "indicates recursive copy in case of folder or wild card path, default is false"
}
},
"required": [
"path"
]
},
"attributes": {
"uiAttributes": {
"documentationLink": "http://www.adobe.com/go/sources-azure-file-storage-en",
"isSource": true,
"category": {
"key": "cloudStorage"
},
"icon": {
"key": "azureFileStorage"
},
"description": {
"key": "azureFileStorageDescription"
},
"label": {
"key": "azureFileStorageLabel"
}
}
}
},
"exploreSpec": {
"name": "FileSystem",
"type": "FileSystem",
"requestSpec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "defines explorable objects",
"properties": {
"objectType": {
"type": "string",
"enum": [
"file",
"folder",
"root"
]
}
},
"allOf": [
{
"if": {
"properties": {
"objectType": {
"enum": [
"file"
]
}
}
},
"then": {
"properties": {
"object": {
"type": "string",
"description": "defines file to get schema or preview of."
},
"fileType": {
"type": "string",
"enum": [
"delimited"
]
},
"preview": {
"type": "boolean"
}
},
"required": [
"object",
"fileType"
]
}
},
{
"if": {
"properties": {
"objectType": {
"enum": [
"folder"
]
}
}
},
"then": {
"properties": {
"object": {
"type": "string"
}
},
"required": [
"object"
]
}
}
]
},
"responseSpec": {
"root": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"description": "lists tables/items under the database/container requested.",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "defines type of an item."
},
"name": {
"type": "string",
"description": "defines display name of an item."
},
"path": {
"type": "string",
"description": "defines path of an item."
},
"canPreview": {
"type": "boolean",
"default": false,
"description": "defines whether an item is previewable or not."
},
"canFetchSchema": {
"type": "boolean",
"default": false,
"description": "defines whether schema can be fetched for an item or not."
}
}
}
},
"folder": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"path": {
"type": "string"
},
"canPreview": {
"type": "boolean",
"default": false
},
"canFetchSchema": {
"type": "boolean",
"default": false
}
}
}
},
"file": {
"delimited": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"format": {
"type": "string"
},
"schema": {
"type": "object",
"properties": {
"columns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
},
"data": {
"type": "array",
"items": {
"type": "object"
}
}
}
}
}
}
},
"attributes": {
"category": "Cloud Storage",
"connectorName": "Azure File Storage",
"isSource": true,
"isDraftModeSupported": true,
"uiAttributes": {
"apiFeatures": {
"explorePaginationSupported": false
}
}
},
"permissionsInfo": {
"manage": [
{
"@type": "lowLevel",
"name": "EnterpriseSource",
"permissions": [
"write"
]
}
],
"view": [
{
"@type": "lowLevel",
"name": "EnterpriseSource",
"permissions": [
"read"
]
}
]
}
}
]
}
curl -X GET \
'https://platform.adobe.io/data/foundation/flowservice/flowSpecs?property=name==%22CloudStorageToAEP%22' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Uma resposta bem-sucedida retorna as informações de especificação de fluxo da origem. Para verificar se o modo de rascunho é compatível com sua origem, verifique se items[0].attributes.isDraftModeSupported
tem um valor de true
.
{
"items": [
{
"id": "9753525b-82c7-4dce-8a9b-5ccfce2b9876",
"name": "CloudStorageToAEP",
"providerId": "0ed90a81-07f4-4586-8190-b40eccef1c5a",
"version": "1.0",
"sourceConnectionSpecIds": [
"b3ba5556-48be-44b7-8b85-ff2b69b46dc4",
"ecadc60c-7455-4d87-84dc-2a0e293d997b",
"b7829c2f-2eb0-4f49-a6ee-55e33008b629",
"4c10e202-c428-4796-9208-5f1f5732b1cf",
"fb2e94c9-c031-467d-8103-6bd6e0a432f2",
"32e8f412-cdf7-464c-9885-78184cb113fd",
"b7bf2577-4520-42c9-bae9-cad01560f7bc",
"998b8ae3-cec0-43b7-8abe-40b1eb4ee069",
"be5ec48c-5b78-49d5-b8fa-7c89ec4569b8",
"54e221aa-d342-4707-bcff-7a4bceef0001",
"c85f9425-fb21-426c-ad0b-405e9bd8a46c",
"26f526f2-58f4-4712-961d-e41bf1ccc0e8"
],
"targetConnectionSpecIds": [
"c604ff05-7f1a-43c0-8e18-33bf874cb11c"
],
"optionSpec": {
"name": "OptionSpec",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"errorDiagnosticsEnabled": {
"title": "Error diagnostics.",
"description": "Flag to enable detailed and sample error diagnostics summary.",
"type": "boolean",
"default": false
},
"partialIngestionPercent": {
"title": "Partial ingestion threshold.",
"description": "Percentage which defines the threshold of errors allowed before the run is marked as failed.",
"type": "number",
"exclusiveMinimum": 0
}
}
}
},
"transformationSpecs": [
{
"name": "Mapping",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "defines various params required for different mapping from source to target",
"properties": {
"mappingId": {
"type": "string"
},
"mappingVersion": {
"type": "string"
}
}
}
},
{
"name": "Encryption",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "defines various params required for encrypted data ingestion",
"properties": {
"publicKeyId": {
"type": "string",
"description": "publicKeyId returned in encryptionKey creation API. One must use the publicKeyId corresponding to the same publicKey they used for encrypting the files"
}
}
}
}
],
"scheduleSpec": {
"name": "PeriodicSchedule",
"type": "Periodic",
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"startTime": {
"description": "epoch time",
"type": "integer"
},
"frequency": {
"type": "string",
"enum": [
"once",
"minute",
"hour",
"day",
"week"
]
},
"interval": {
"type": "integer"
},
"backfill": {
"type": "boolean",
"default": true
}
},
"required": [
"startTime",
"frequency"
],
"if": {
"properties": {
"frequency": {
"const": "once"
}
}
},
"then": {
"allOf": [
{
"not": {
"required": [
"interval"
]
}
},
{
"not": {
"required": [
"backfill"
]
}
}
]
},
"else": {
"required": [
"interval"
],
"if": {
"properties": {
"frequency": {
"const": "minute"
}
}
},
"then": {
"properties": {
"interval": {
"minimum": 15
}
}
},
"else": {
"properties": {
"interval": {
"minimum": 1
}
}
}
}
}
},
"attributes": {
"isSourceFlow": true,
"flacValidationSupported": true,
"isDraftModeSupported": true,
"frequency": "batch",
"notification": {
"category": "sources",
"flowRun": {
"enabled": true
}
}
},
"permissionsInfo": {
"manage": [
{
"@type": "lowLevel",
"name": "EnterpriseSource",
"permissions": [
"write"
]
}
],
"view": [
{
"@type": "lowLevel",
"name": "EnterpriseSource",
"permissions": [
"read"
]
}
]
}
}
]
}
Para criar uma conexão base de rascunho, faça uma solicitação POST ao /connections
endpoint do Flow Service API e fornecer mode=draft
como parâmetro de consulta.
Formato da API
POST /connections?mode=draft
Parâmetro | Descrição |
---|---|
mode |
Um parâmetro de consulta fornecido pelo usuário que decide o estado da conexão base. Para definir uma conexão base como rascunho, defina mode para draft . |
Solicitação
A solicitação a seguir cria uma conexão básica de rascunho para o Azure File Storage origem:
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/connections' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-d '{
"name": "ACME Azure File Storage Base Connection",
"description": "Azure File Storage base connection for ACME data (DRAFT)",
"auth": {
"specName": "Basic Authentication",
"params": {
"host": "{HOST}",
"userId": "{USER_ID}",
"password": "{PASSWORD}"
}
},
"connectionSpec": {
"id": "be5ec48c-5b78-49d5-b8fa-7c89ec4569b8",
"version": "1.0"
}
}'
Resposta
Uma resposta bem-sucedida retorna a ID de conexão básica e a tag correspondente para a conexão básica de rascunho. Você pode usar essa ID posteriormente para atualizar e publicar sua conexão base.
{
"id": "f9377f50-607a-4818-b77f-50607a181860",
"etag": "\"2f0276fa-0000-0200-0000-5eab3abb0000\""
}
Quando o rascunho estiver pronto para ser publicado, faça uma solicitação POST ao /connections
e forneça a ID da conexão de base de rascunho que você deseja publicar, bem como uma operação de ação para publicação.
Formato da API
POST /connections/{BASE_CONNECTION_ID}/action?op=publish
Parâmetro | Descrição |
---|---|
op |
Uma operação de ação que atualiza o estado da conexão base consultada. Para publicar uma conexão de base de rascunho, defina op para publish . |
Solicitação
A solicitação a seguir publica o rascunho de conexão base para Azure File Storage criado em uma etapa anterior.
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/connections/f9377f50-607a-4818-b77f-50607a181860/action?op=publish' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Resposta
Uma resposta bem-sucedida retorna a ID e a tag correspondente da conexão base publicada.
{
"id": "f9377f50-607a-4818-b77f-50607a181860",
"etag": "\"2f0276fa-0000-0200-0000-5eab3abb0000\""
}
Para criar uma conexão de origem de rascunho, faça uma solicitação POST ao /sourceConnections
endpoint do Flow Service API e fornecer mode=draft
como parâmetro de consulta.
Formato da API
POST /sourceConnections?mode=draft
Parâmetro | Descrição |
---|---|
mode |
Um parâmetro de consulta fornecido pelo usuário que decide o estado da conexão de origem. Para definir uma conexão de origem como rascunho, defina mode para draft . |
Solicitação
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/sourceConnections?mode=draft' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-d '{
"name": "ACME Azure File Storage Source Connection",
"description: "Azure File Storage source connection for ACME data (DRAFT)",
"baseConnectionId": "f9377f50-607a-4818-b77f-50607a181860",
"data": {
"format": "delimited",
},
"params": {
"path": "/acme/summerCampaign/account.csv",
"type": "file"
},
"connectionSpec": {
"id": "be5ec48c-5b78-49d5-b8fa-7c89ec4569b8",
"version": "1.0"
}
}'
Resposta
Uma resposta bem-sucedida retorna a ID da conexão de origem e a tag correspondente para a conexão de origem de rascunho. Você pode usar essa ID posteriormente para atualizar e publicar sua conexão de origem.
{
"id": "26b53912-1005-49f0-b539-12100559f0e2",
"etag": "\"11004d97-0000-0200-0000-5f3c3b140000\""
}
Não é possível publicar uma conexão de origem se a conexão base associada ainda estiver em estado de rascunho. Certifique-se de que a conexão base seja publicada primeiro, antes de publicar sua conexão de origem.
Quando o rascunho estiver pronto para ser publicado, faça uma solicitação POST ao /sourceConnections
e forneça a ID da conexão de origem de rascunho que você deseja publicar, bem como uma operação de ação para publicação.
Formato da API
POST /sourceConnections/{SOURCE_CONNECTION_ID}/action?op=publish
Parâmetro | Descrição |
---|---|
op |
Uma operação de ação que atualiza o estado da conexão de origem consultada. Para publicar uma conexão de origem de rascunho, defina op para publish . |
Solicitação
A solicitação a seguir publica o rascunho de conexão de origem para Azure File Storage criado em uma etapa anterior.
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/connections/26b53912-1005-49f0-b539-12100559f0e2/action?op=publish' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Resposta
Uma resposta bem-sucedida retorna a ID e a tag correspondente da conexão de origem publicada.
{
"id": "26b53912-1005-49f0-b539-12100559f0e2",
"etag": "\"11004d97-0000-0200-0000-5f3c3b140000\""
}
Para criar uma conexão de destino de rascunho, faça uma solicitação POST ao /targetConnections
endpoint do Flow Service API e fornecer mode=draft
como parâmetro de consulta.
Formato da API
POST /targetConnections?mode=draft
Parâmetro | Descrição |
---|---|
mode |
Um parâmetro de consulta fornecido pelo usuário que decide o estado da conexão de destino. Para definir uma conexão de destino como rascunho, defina mode para draft . |
Solicitação
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/targetConnections?mode=draft' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-d '{
"name": "ACME Azure File Storage Target Connection",
"description": "Azure File Storage target connection ACME data (DRAFT)",
"data": {
"schema": {
"id": "{SCHEMA_ID}",
"version": "application/vnd.adobe.xed-full+json;version=1"
}
},
"params": {
"dataSetId": "{DATASET_ID}"
},
"connectionSpec": {
"id": "c604ff05-7f1a-43c0-8e18-33bf874cb11c",
"version": "1.0"
}
}'
Resposta
Uma resposta bem-sucedida retorna a ID de conexão do público-alvo e a tag correspondente para a conexão do público-alvo de rascunho. Você pode usar essa ID posteriormente para atualizar e publicar sua conexão de destino.
{
"id": "dbc5c132-bc2a-4625-85c1-32bc2a262558",
"etag": "\"8e000533-0000-0200-0000-5f3c40fd0000\""
}
Não é possível publicar uma conexão de destino se a conexão base associada ainda estiver em estado de rascunho. Certifique-se de que sua conexão base seja publicada primeiro, antes de publicar sua conexão de destino.
Quando o rascunho estiver pronto para ser publicado, faça uma solicitação POST ao /targetConnections
e forneça a ID da conexão de destino de rascunho que você deseja publicar, bem como uma operação de ação para publicação.
Formato da API
POST /targetConnections/{TARGET_CONNECTION_ID}/action?op=publish
Parâmetro | Descrição |
---|---|
op |
Uma operação de ação que atualiza o estado da conexão de destino consultada. Para publicar uma conexão de destino de rascunho, defina op para publish . |
Solicitação
A solicitação a seguir publica o rascunho de conexão de destino para Azure File Storage criado em uma etapa anterior.
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/connections/dbc5c132-bc2a-4625-85c1-32bc2a262558/action?op=publish' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Resposta
Uma resposta bem-sucedida retorna a ID e a tag correspondente da conexão de destino publicada.
{
"id": "dbc5c132-bc2a-4625-85c1-32bc2a262558",
"etag": "\"8e000533-0000-0200-0000-5f3c40fd0000\""
}
Para definir um fluxo de dados como rascunho, faça uma solicitação POST à /flows
ao adicionar o mode=draft
como parâmetro de consulta. Isso permite criar um fluxo de dados e salvá-lo como rascunho.
Formato da API
POST /flows?mode=draft
Parâmetro | Descrição |
---|---|
mode |
Um parâmetro de consulta fornecido pelo usuário que decide o estado do fluxo de dados. Para definir um fluxo de dados como rascunho, defina mode para draft . |
Solicitação
A solicitação a seguir cria um fluxo de dados de rascunho.
'https://platform.adobe.io/data/foundation/flowservice/flows?mode=draft' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-d '{
"name": "ACME Azure File Storage Dataflow",
"description": "Azure File Storage dataflow for ACME data (DRAFT)",
"sourceConnectionIds": [
"26b53912-1005-49f0-b539-12100559f0e2"
],
"targetConnectionIds": [
"dbc5c132-bc2a-4625-85c1-32bc2a262558"
],
"flowSpec": {
"id": "9753525b-82c7-4dce-8a9b-5ccfce2b9876",
"version": "1.0"
}
}'
Resposta
Uma resposta bem-sucedida retorna a ID do fluxo e a tag correspondente para o fluxo de dados de rascunho. Você pode usar essa ID posteriormente para atualizar e publicar seu fluxo de dados.
{
"id": "c9751426-dff8-49b0-965f-50defcf4187b",
"etag": "\"69057131-0000-0200-0000-640f48320000\""
}
Não é possível publicar um fluxo de dados se as conexões de origem e de destino associadas ainda estiverem em estado de rascunho. Verifique se suas conexões de origem e de destino foram publicadas primeiro, antes de publicar seu fluxo de dados.
Quando o rascunho estiver pronto para ser publicado, faça uma solicitação POST ao /flows
ao fornecer a ID do fluxo de dados de rascunho que você deseja publicar, bem como uma operação de ação para publicação.
Formato da API
POST /flows/{FLOW_ID}/action?op=publish
Parâmetro | Descrição |
---|---|
op |
Uma operação de ação que atualiza o estado do fluxo de dados consultado. Para publicar um fluxo de dados de rascunho, defina op para publish . |
Solicitação
A solicitação a seguir publica o fluxo de dados de rascunho.
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/flows/c9751426-dff8-49b0-965f-50defcf4187b/action?op=publish' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
Resposta
Uma resposta bem-sucedida retorna a ID e a variável etag
do seu fluxo de dados.
{
"id": "c9751426-dff8-49b0-965f-50defcf4187b",
"etag": "\"69057131-0000-0200-0000-640f48320000\""
}
Seguindo este tutorial, você aprendeu a criar rascunhos de seus Flow Service entidades adjudicantes, bem como a publicação desses rascunhos. Para obter mais informações sobre fontes, leia o visão geral das origens.