Konfigurera källspecifikation för självbetjäningskällor (batch-SDK)
Source-specifikationerna innehåller information som är specifik för en källa, inklusive attribut som gäller en källas kategori, betastatus och katalogikon. De innehåller även användbar information som URL-parametrar, innehåll, rubrik och schema. Source-specifikationerna beskriver också schemat för de parametrar som krävs för att skapa en källanslutning från en basanslutning. Schemat är nödvändigt för att skapa en källanslutning.
I bilagan finns ett exempel på en fullständigt ifylld källspecifikation.
"sourceSpec": {
"attributes": {
"uiAttributes": {
"isSource": true,
"isPreview": true,
"isBeta": true,
"category": {
"key": "protocols"
},
"icon": {
"key": "genericRestIcon"
},
"description": {
"key": "genericRestDescription"
},
"label": {
"key": "genericRestLabel"
}
},
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Defines static and user input parameters to fetch resource values.",
"properties": {
"urlParams": {
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "Enter resource url host path.",
"example": "https://{domain}.api.mailchimp.com"
},
"path": {
"type": "string",
"description": "Enter resource path",
"example": "/3.0/reports/campaignId/email-activity"
},
"method": {
"type": "string",
"description": "HTTP method type.",
"enum": [
"GET",
"POST"
]
},
"queryParams": {
"type": "object",
"description": "The query parameters in json format",
}
},
"required": [
"host",
"path",
"method"
]
},
"headerParams": {
"type": "object",
"description": "The header parameters in json format",
},
"contentPath": {
"type": "object",
"description": "The parameters required for main collection content.",
"properties": {
"path": {
"description": "The path to the main content.",
"type": "string",
"example": "$.emails"
},
"skipAttributes": {
"type": "array",
"description": "The list of attributes that needs to be skipped while fattening the array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"keepAttributes": {
"type": "array",
"description": "The list of attributes that needs to be kept while fattening the array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"overrideWrapperAttribute": {
"type": "string",
"description": "The new name to be used for the root content path node.",
"example": "email"
}
},
"required": [
"path"
]
},
"explodeEntityPath": {
"type": "object",
"description": "The parameters required for the sub-array content.",
"properties": {
"path": {
"description": "The path to the sub-array content.",
"type": "string",
"example": "$.email.activity"
},
"skipAttributes": {
"type": "array",
"description": "The list of attributes that needs to be skipped while fattening sub-array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"keepAttributes": {
"type": "array",
"description": "The list of attributes that needs to be kept while fattening the sub-array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"overrideWrapperAttribute": {
"type": "string",
"description": "The new name to be used for the root content path node.",
"example": "activity"
}
},
"required": [
"path"
]
},
"paginationParams": {
"type": "object",
"description": "The parameters required to fetch data using pagination.",
"properties": {
"type": {
"description": "The pagination fetch type.",
"type": "string",
"enum": [
"OFFSET",
"POINTER"
]
},
"limitName": {
"type": "string",
"description": "The limit property name",
"example": "limit or count"
},
"limitValue": {
"type": "integer",
"description": "The number of records to fetch per page.",
"example": "limit=10 or count=10"
},
"offsetName": {
"type": "string",
"description": "The offset property name",
"example": "offset"
},
"pointerPath": {
"type": "string",
"description": "The path to pointer property",
"example": "$.paging.next"
}
},
"required": [
"type",
"limitName",
"limitValue"
]
},
"scheduleParams": {
"type": "object",
"description": "The parameters required to fetch data for batch schedule.",
"properties": {
"scheduleStartParamName": {
"type": "string",
"description": "The order property name to get the order by date."
},
"scheduleEndParamName": {
"type": "string",
"description": "The order property name to get the order by date."
},
"scheduleStartParamFormat": {
"type": "string",
"description": "The order property name to get the order by date.",
"example": "yyyy-MM-ddTHH:mm:ssZ"
},
"scheduleEndParamFormat": {
"type": "string",
"description": "The order property name to get the order by date.",
"example": "yyyy-MM-ddTHH:mm:ssZ"
}
},
"required": [
"scheduleStartParamName",
"scheduleEndParamName"
]
}
},
"required": [
"urlParams",
"contentPath",
"paginationParams",
"scheduleParams"
]
}
},
}
sourceSpec.attributes
sourceSpec.attributes.uiAttributes
sourceSpec.attributes.uiAttributes.isBeta
true
false
sourceSpec.attributes.uiAttributes.category
advertising
crm
customer success
database
ecommerce
marketing automation
payments
protocols
sourceSpec.attributes.uiAttributes.icon
mailchimp-icon.svg
sourceSpec.attributes.uiAttributes.description
sourceSpec.attributes.uiAttributes.label
sourceSpec.attributes.spec.properties.urlParams
sourceSpec.attributes.spec.properties.urlParams.properties.path
/3.0/reports/${campaignId}/email-activity
sourceSpec.attributes.spec.properties.urlParams.properties.method
GET
, POST
sourceSpec.attributes.spec.properties.urlParams.properties.queryParams
${USER_PARAMETER}
."queryParams" : {"key" : "value", "key1" : "value1"}
läggs till i käll-URL:en som: /?key=value&key1=value1
sourceSpec.attributes.spec.properties.spec.properties.headerParams
"headerParams" : {"Content-Type" : "application/json", "x-api-key" : "key"}
sourceSpec.attributes.spec.properties.bodyParams
sourceSpec.attributes.spec.properties.contentPath
sourceSpec.attributes.spec.properties.contentPath.path
$.emails
sourceSpec.attributes.spec.properties.contentPath.skipAttributes
[total_items]
sourceSpec.attributes.spec.properties.contentPath.keepAttributes
[total_items]
sourceSpec.attributes.spec.properties.contentPath.overrideWrapperAttribute
contentPath
.email
sourceSpec.attributes.spec.properties.explodeEntityPath
sourceSpec.attributes.spec.properties.explodeEntityPath.path
$.email.activity
sourceSpec.attributes.spec.properties.explodeEntityPath.skipAttributes
[total_items]
sourceSpec.attributes.spec.properties.explodeEntityPath.keepAttributes
[total_items]
sourceSpec.attributes.spec.properties.explodeEntityPath.overrideWrapperAttribute
explodeEntityPath
.activity
sourceSpec.attributes.spec.properties.paginationParams
sourceSpec.attributes.spec.properties.paginationParams.type
OFFSET
: Med den här sidnumreringstypen kan du analysera resultaten genom att ange ett index från vilken den resulterande arrayen ska startas och en gräns för hur många resultat som returneras.POINTER
: Med den här sidnumreringstypen kan du använda enpointer
-variabel för att peka på ett visst objekt som behöver skickas med en begäran. Sidnumreringen av pekartypen kräver en sökväg i nyttolasten som pekar på nästa sida.CONTINUATION_TOKEN
: Den här sidnumreringstypen gör att du kan lägga till din fråga eller rubrikparametrar med en fortsättningssymbol för att hämta återstående returdata från källan, som inte returnerades från början på grund av ett fördefinierat maxvärde.PAGE
: Med den här sidnumreringstypen kan du lägga till frågeparametern med en sidindelningsparameter för att gå igenom returdata för sidor, med början från sidan noll.NONE
: Den här sidnumreringstypen kan användas för källor som inte stöder någon av de tillgängliga sidnumreringstyperna. SidnumreringstypenNONE
returnerar hela svarsdata efter en begäran.
sourceSpec.attributes.spec.properties.paginationParams.limitName
limit
eller count
sourceSpec.attributes.spec.properties.paginationParams.limitValue
limit=10
eller count=10
sourceSpec.attributes.spec.properties.paginationParams.offSetName
offset
.offset
sourceSpec.attributes.spec.properties.paginationParams.pointerPath
pointer
.pointer
sourceSpec.attributes.spec.properties.scheduleParams
startTime
och endTime
, som båda gör att du kan ange specifika tidsintervall för batchkörningar, vilket gör att poster som hämtats i en tidigare batchkörning inte hämtas igen.sourceSpec.attributes.spec.properties.scheduleParams.scheduleStartParamName
since_last_changed
sourceSpec.attributes.spec.properties.scheduleParams.scheduleEndParamName
before_last_changed
sourceSpec.attributes.spec.properties.scheduleParams.scheduleStartParamFormat
scheduleStartParamName
.yyyy-MM-ddTHH:mm:ssZ
sourceSpec.attributes.spec.properties.scheduleParams.scheduleEndParamFormat
scheduleEndParamName
.yyyy-MM-ddTHH:mm:ssZ
sourceSpec.spec.properties
spec.properties
.Ytterligare resurser appendix
I följande avsnitt finns information om ytterligare konfigurationer som du kan göra i sourceSpec
, inklusive avancerade scheman och anpassade scheman.
Exempel på innehållssökväg content-path
Följande är ett exempel på innehållet i egenskapen contentPath
i en MailChimp Members-anslutningsspecifikation.
"contentPath": {
"path": "$.members",
"skipAttributes": [
"_links",
"total_items",
"list_id"
],
"overrideWrapperAttribute": "member"
}
Exempel på användarindata för spec.properties
user-input
Följande är ett exempel på en användartillhandahållen spec.properties
som använder en MailChimp Members-anslutningsspecifikation.
I det här exemplet tillhandahålls listId
som en del av urlParams.path
. Om du behöver hämta listId
från en kund måste du också definiera den som en del av spec.properties
.
"urlParams": {
"path": "/3.0/lists/${listId}/members",
"method": "GET"
}
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Define user input parameters to fetch resource values.",
"properties": {
"listId": {
"type": "string",
"description": "listId for which members need to fetch."
}
}
}
Exempel på Source-specifikation source-spec
Följande är en färdig källspecifikation som använder MailChimp Members:
"sourceSpec": {
"attributes": {
"uiAttributes": {
"isSource": true,
"isPreview": true,
"isBeta": true,
"category": {
"key": "marketingAutomation"
},
"icon": {
"key": "mailchimpMembersIcon"
},
"description": {
"key": "mailchimpMembersDescription"
},
"label": {
"key": "mailchimpMembersLabel"
}
},
"urlParams": {
"host": "https://{domain}.api.mailchimp.com",
"path": "/3.0/lists/${listId}/members",
"method": "GET"
},
"contentPath": {
"path": "$.members",
"skipAttributes": [
"_links",
"total_items",
"list_id"
],
"overrideWrapperAttribute": "member"
},
"paginationParams": {
"type": "OFFSET",
"limitName": "count",
"limitValue": "100",
"offSetName": "offset"
},
"scheduleParams": {
"scheduleStartParamName": "since_last_changed",
"scheduleEndParamName": "before_last_changed",
"scheduleStartParamFormat": "yyyy-MM-ddTHH:mm:ss:fffffffK",
"scheduleEndParamFormat": "yyyy-MM-ddTHH:mm:ss:fffffffK"
}
},
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Define user input parameters to fetch resource values.",
"properties": {
"listId": {
"type": "string",
"description": "listId for which members need to fetch."
}
}
}
}
Konfigurera olika sidnumreringstyper för källan pagination
Nedan följer exempel på andra sidnumreringstyper som stöds av självbetjäningskällor (Batch SDK):
Med den här sidnumreringstypen kan du tolka resultaten genom att ange ett index från vilken den resulterande arrayen ska startas och en gräns för hur många resultat som returneras. Exempel:
code language-json |
---|
|
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 | |
---|---|
Egenskap | Beskrivning |
type |
Den typ av sidnumrering som används för att returnera data. |
limitName |
Namnet på den gräns genom vilken API:t kan ange antalet poster som ska hämtas på en sida. |
limitValue |
Antalet poster som ska hämtas på en sida. |
offSetName |
Förskjutningsattributets namn. Detta krävs om sidnumreringstypen är inställd på offset . |
endConditionName |
Ett användardefinierat värde som anger villkoret som avslutar pagineringsslingan i nästa HTTP-begäran. Du måste ange det attributnamn som du vill avsluta villkoret på. |
endConditionValue |
Det attributvärde som du vill placera slutvillkoret på. |
Med den här sidnumreringstypen kan du använda en pointer
-variabel för att peka på ett visst objekt som behöver skickas med en begäran. Sidnumreringen av pekartypen kräver en sökväg i nyttolasten som pekar på nästa sida. Exempel:
code language-json |
---|
|
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 | |
---|---|
Egenskap | Beskrivning |
type |
Den typ av sidnumrering som används för att returnera data. |
limitName |
Namnet på den gräns genom vilken API:t kan ange antalet poster som ska hämtas på en sida. |
limitValue |
Antalet poster som ska hämtas på en sida. |
pointerPath |
Pekarens attributnamn. Detta kräver JSON-sökväg till attributet som pekar på nästa sida. |
En fortsättningssymbol för numrering returnerar en strängtoken som anger att det finns fler objekt som inte kan returneras på grund av ett fördefinierat maximalt antal objekt som kan returneras i ett enda svar.
En källa som stöder typen fortsättning av token för sidnumrering kan ha en sidnumreringsparameter som liknar:
code language-json |
---|
|
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 | |
---|---|
Egenskap | Beskrivning |
type |
Den typ av sidnumrering som används för att returnera data. |
continuationTokenPath |
Värdet som måste läggas till i frågeparametrarna för att kunna gå till nästa sida i de returnerade resultaten. |
parameterType |
Egenskapen parameterType definierar var parameterName måste läggas till. Med typen QUERYPARAM kan du lägga till din fråga med parameterName . Med HEADERPARAM kan du lägga till parameterName i din rubrikbegäran. |
parameterName |
Namnet på den parameter som används för att inkludera en fortsättningssymbol. Formatet är följande: {PARAMETER_NAME}={CONTINUATION_TOKEN} . |
delayRequestMillis |
Med egenskapen delayRequestMillis i sidnumreringen kan du styra hur många begäranden som görs till källan. Vissa källor kan ha en gräns för hur många begäranden du kan göra per minut. Zendesk har till exempel en begränsning på 100 begäranden per minut och om du definierar delayRequestMillis till 850 kan du konfigurera källan så att den kan ringa anrop på ungefär 80 begäranden per minut, vilket ligger under tröskelvärdet på 100 begäranden per minut. |
Följande är ett exempel på ett svar som returneras med en fortsättningstokentyp för sidnumrering:
code language-json |
---|
|
Med sidnumreringstypen PAGE
kan du gå igenom returdata med antalet sidor med början från noll. När du använder sidnumrering av typen PAGE
måste du ange antalet poster som anges på en enda sida.
code language-json |
---|
|
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 layout-auto | |
---|---|
Egenskap | Beskrivning |
type |
Den typ av sidnumrering som används för att returnera data. |
limitName |
Namnet på den gräns genom vilken API:t kan ange antalet poster som ska hämtas på en sida. |
limitValue |
Antalet poster som ska hämtas på en sida. |
initialPageIndex |
(Valfritt) Det inledande sidindexet definierar det sidnummer från vilket sidnumreringen börjar. Det här fältet kan användas för källor där sidnumreringen inte börjar från 0. Om inget anges används standardvärdet 0 för det inledande sidindexet. Fältet förväntar ett heltal. |
endPageIndex |
(Valfritt) Med hjälp av indexvärdet för slutsidan kan du skapa ett slutvillkor och stoppa sidnumreringen. Det här fältet kan användas när standardslutvillkoren för att stoppa sidnumrering inte är tillgängliga. Det här fältet kan också användas om antalet sidor som ska importeras eller det sista sidnumret anges via svarshuvudet, som är vanligt när PAGE -typnumrering används. Värdet för indexvärdet för slutsidan kan antingen vara det sista sidnumret eller ett strängtypsuttryck från svarshuvudet. Du kan till exempel använda headers.x-pagecount för att tilldela slutsidesindex till värdet x-pagecount från svarshuvuden. Obs!: x-pagecount är ett obligatoriskt svarshuvud för vissa källor och innehåller värdeantalet sidor som ska importeras. |
pageParamName |
Namnet på den parameter som du måste lägga till i frågeparametrar för att kunna gå igenom olika sidor i returdata. https://abc.com?pageIndex=1 skulle till exempel returnera den andra sidan av en API:s returnyttolast. |
maximumRequest |
Det maximala antalet begäranden som en källa kan göra för en given stegvis körning. Den aktuella standardgränsen är 10000. |
Sidnumreringstypen NONE
kan användas för källor som inte stöder någon av de tillgängliga sidnumreringstyperna. Källor som använder sidnumreringstypen NONE
returnerar helt enkelt alla hämtningsbara poster när en GET-begäran görs.
code language-json |
---|
|
Avancerad schemaläggning för självbetjäningskällor (batch-SDK)
Konfigurera källans inkrementella schema och schema för efterfyllnad med avancerad schemaläggning. Med egenskapen incremental
kan du konfigurera ett schema där källan bara importerar nya eller ändrade poster, medan egenskapen backfill
gör att du kan skapa ett schema för att importera historiska data.
Med avancerad schemaläggning kan du använda uttryck och funktioner som är specifika för källan för att konfigurera inkrementella scheman och bakgrundsfyllningsscheman. I exemplet nedan kräver Zendesk-källan att det inkrementella schemat formateras som type:user updated > {START_TIME} updated < {END_TIME}
och bakåtfyllnad som type:user updated < {END_TIME}
.
"scheduleParams": {
"type": "ADVANCE",
"paramFormat": "yyyy-MM-ddTHH:mm:ssK",
"incremental": "type:user updated > {START_TIME} updated < {END_TIME}",
"backfill": "type:user updated < {END_TIME}"
}
scheduleParams.type
ADVANCE
om du vill använda den avancerade schemaläggningstypen.scheduleParams.paramFormat
scheduleStartParamFormat
- och scheduleEndParamFormat
-värden.scheduleParams.incremental
scheduleParams.backfill
När du har konfigurerat din avancerade schemaläggning måste du referera till scheduleParams
i avsnittet för URL-, brödtext- eller rubrikparametrar, beroende på vad din källa stöder. I exemplet nedan är {SCHEDULE_QUERY}
en platshållare som används för att ange var inkrementella schemaläggningsuttryck och schemaläggningsuttryck för bakåtfyllnad ska användas. Om det gäller en Zendesk-källa används query
i queryParams
för att ange avancerad schemaläggning.
"urlParams": {
"path": "/api/v2/search/export@{if(empty(coalesce(pipeline()?.parameters?.ingestionStart,'')),'?query=type:user&filter[type]=user&','')}",
"method": "GET",
"queryParams": {
"query": "{SCHEDULE_QUERY}",
"filter[type]": "user"
}
}
Lägg till ett anpassat schema för att definiera källans dynamiska attribut
Du kan inkludera ett anpassat schema i sourceSpec
för att definiera alla attribut som krävs för källan, inklusive alla dynamiska attribut som du kan behöva. Du kan uppdatera källans motsvarande anslutningsspecifikation genom att göra en PUT-begäran till /connectionSpecs
-slutpunkten i Flow Service API, och samtidigt ange ditt anpassade schema i sourceSpec
-avsnittet i anslutningsspecifikationen.
Följande är ett exempel på ett anpassat schema som du kan lägga till i källans anslutningsspecifikation:
"schema": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"organization_id": {
"type": "integer",
"minimum": -9007199254740992,
"maximum": 9007199254740991
}
"active": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"email": {
"type": "string"
},
"iana_time_zone": {
"type": "string"
},
"id": {
"type": "integer"
},
"locale": {
"type": "string"
},
"locale_id": {
"type": "integer"
},
"moderator": {
"type": "boolean"
},
"name": {
"type": "string"
},
"only_private_comments": {
"type": "boolean"
},
"report_csv": {
"type": "boolean"
},
"restricted_agent": {
"type": "boolean"
},
"result_type": {
"type": "string"
},
"role": {
"type": "integer"
},
"shared": {
"type": "boolean"
},
"shared_agent": {
"type": "boolean"
},
"suspended": {
"type": "boolean"
},
"ticket_restriction": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"two_factor_auth_enabled": {
"type": "boolean"
},
"updated_at": {
"type": "string"
},
"url": {
"type": "string"
},
"verified": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
Nästa steg
När källspecifikationerna är ifyllda kan du fortsätta att konfigurera utforska specifikationerna för den källa som du vill integrera med plattformen. Mer information finns i dokumentet om Konfigurera specifikationer.