Automatiser UI-handlinger med CluedIn GraphQL API
Som Master Data Management-system giver CluedIn brugerne mulighed for at arbejde med data via en brugerflade og low-code-værktøjer. Du kan gennemføre hele datalivscyklussen, fra indlæsning til modellering, transformation, rensning, berigelse, deduplikering og eksport, uden at skrive en eneste linje kode.
Noget arbejde er stadig nemmere at automatisere. Et lille script kan spare forretningsbrugere for gentagne UI-opgaver, især når udviklings-, staging- og produktionsinstanser skal holdes synkroniseret gennem en CI/CD-pipeline.
I denne artikel bygger vi en grundlæggende automatisering uden at kende API'et på forhånd. Udgangspunktet er, at CluedIns UI kommunikerer med serveren gennem et GraphQL API.
To GraphQL API-endpoints
CluedIn tilbyder to GraphQL API-endpoints:
/api/api/graphql: Endpointet til dataforespørgsler./graphql: Endpointet til UI-interaktioner.
Autentificering
CluedIn bruger JSON Web Tokens (JWT) til autorisation.
Der er to slags tokens i CluedIn: API Tokens og Access Tokens.
API Tokens bruges til at hente data ud af CluedIn eller læse data ind. Du kan oprette eller kopiere et fra Administration -> API Tokens.
Access Tokens genereres, når du logger ind i CluedIn som bruger.
Du skal bruge et API Token for at bruge /api/api/graphql-endpointet.
/graphql-endpointet accepterer kun Access Tokens, så du skal logge ind med din e-mail og adgangskode for at få et.
Artiklen Using Postman to interact with the CluedIn API viser, hvordan du henter et Access Token med Postman.
Hvis du vil forespørge data med Python SDK'et, kan du læse Search Entities with CluedIn Python SDK.
Udforskning af GraphQL API
Vi automatiserer en handling, der normalt udføres i UI'et, med CluedIn GraphQL API og CluedIn Python SDK.
Antag, at du skal synkronisere Vocabularies fra et andet system. Du kan oprette dem en ad gangen i CluedIns UI, men det er en oplagt opgave at automatisere.
Start med at oprette et test-Vocabulary i browseren og holde øje med API-requests. Du kan bruge fanen Network eller GraphQL Network Inspector. Jeg synes, GraphQL Network Inspector er nemmere.
Jeg viser begge metoder. Først opretter jeg et test-Vocabulary i CluedIn, mens fanen Network er åben:
I listen over GraphQL-requests kan jeg se et kald til mutationen createVocabulary:
GraphQL Network Inspector gør kaldet nemmere at finde:
Uanset metode kan vi nu kopiere GraphQL-forespørgslen:
mutation createVocabulary($vocabulary: InputVocabulary) {
management {
id
createVocabulary(vocabulary: $vocabulary) {
...Vocabulary
__typename
}
__typename
}
}
fragment Vocabulary on Vocabulary {
vocabularyId
vocabularyName
keyPrefix
isCluedInCore
entityTypeConfiguration {
icon
entityType
displayName
__typename
}
isDynamic
isProvider
isActive
grouping
createdAt
providerId
description
connector {
id
name
about
icon
__typename
}
__typename
}
Requesten indeholder også disse variabler:
{
"vocabulary": {
"vocabularyName": "Test",
"entityTypeConfiguration": {
"new": false,
"icon": "Profile",
"entityType": "/IMDb/Name",
"displayName": "IMDb Name"
},
"providerId": "",
"keyPrefix": "test",
"description": ""
}
}
Python SDK
Nu kan vi bruge CluedIn Python SDK til at oprette et Vocabulary.
Jeg starter med at oprette en fil med mine loginoplysninger til CluedIn. Du kan også angive dem som environment-variabler:
{
"domain": "172.167.52.102.sslip.io",
"org_name": "foobar",
"user_email": "admin@foobar.com",
"user_password": "mysecretpassword"
}
Så installerer jeg CluedIn Python SDK:
%pip install cluedin
Derefter logger jeg ind i CluedIn for at få et Access Token:
import cluedin
ctx = cluedin.Context.from_json_file('cluedin.json')
ctx.get_token()
ctx-objektet indeholder nu et Access Token og kan bruges til at oprette et Vocabulary:
def create_vocabulary(ctx, name, prefix):
query = """
mutation createVocabulary($vocabulary: InputVocabulary) {
management {
id
createVocabulary(vocabulary: $vocabulary) {
...Vocabulary
}
}
}
fragment Vocabulary on Vocabulary {
vocabularyId
vocabularyName
keyPrefix
entityTypeConfiguration {
icon
entityType
displayName
}
providerId
description
}
"""
variables = {
"vocabulary": {
"vocabularyName": name,
"entityTypeConfiguration": {
"new": False,
"icon": "Profile",
"entityType": "/IMDb/Name",
"displayName": "IMDb Name"
},
"providerId": "",
"keyPrefix": prefix,
"description": ""
}
}
return cluedin.gql.org_gql(ctx, query, variables)
Kald funktionen:
print(create_vocabulary(ctx, 'Foo Bar', 'foo.bar'))
Output:
{
"data": {
"management": {
"id": "management",
"createVocabulary": {
"vocabularyId": "e4528e92-f4ad-406a-aeab-756acc20fd01",
"vocabularyName": "Foo Bar",
"keyPrefix": "foo.bar",
"entityTypeConfiguration": {
"icon": "Profile",
"entityType": "/IMDb/Name",
"displayName": "IMDb Name"
},
"providerId": null,
"description": ""
}
}
}
}
Det nye Vocabulary vises i UI'et:
Jeg har brugt samme metode i rigtige projekter, for eksempel til at:
- oprette manglende Vocabularies og keys for en given Entity;
- udforske Data Parts for en CluedIn Entity for at fejlfinde overmerging.