Brug af CluedIn GraphQL API til at automatisere UI-handlinger

CluedIn opfordrer som Master Data Management-system brugerne til at arbejde med data via UI og en low-code tilgang. Du kan gennemføre en fuld datacyklus fra indtagelse af data i CluedIn til datamodellering, transformation, rensning, berigelse, deduplikering og eksport uden at skrive en eneste linje kode.

Der er dog situationer, hvor automatisering og simpel scripting kan redde dagen. Og på samme måde som vi kan frigøre forretningsbrugere fra at skulle håndtere IT og kode, kan vi frigøre dem fra gentagne handlinger i brugergrænsefladen, når man for eksempel implementerer en CI/CD-pipeline mellem udviklings-, staging- og produktionsinstanser.

I denne artikel implementerer vi grundlæggende automatisering uden at vide for meget om det på forhånd. Lad os starte med det faktum, at CluedIn UI kommunikerer med serveren via GraphQL API.

To GraphQL API-endpoints

CluedIn tilbyder to GraphQL API-endpoints:

  • /api/api/graphql - endpointet der bruges til at forespørge data.
  • /graphql - endpointet til UI-interaktioner.

Autentificering

CluedIn bruger JWT token-baseret autorisation.

Der er to slags tokens i CluedIn: API Tokens og Access Tokens.

API Tokens bruges til at udtrække eller indlæse data fra og ind i CluedIn. Du kan oprette eller kopiere et API Token fra Administration -> API Tokens.

Access Tokens genereres, når du logger ind i CluedIn som bruger.

Du skal bruge et API Token for at anvende /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.

Hvis du bruger et værktøj som Postman, er her en artikel, der forklarer, hvordan du kan få dit Access Token: "Using Postman to interact with CluedIn API".

Hvis du planlægger at forespørge data med Python SDK, dækker en anden artikel dette emne: "Search Entities with CluedIn Python SDK".

Udforskning af GraphQL API

I denne artikel udforsker vi et use case med automatisering af de handlinger, du normalt udfører i UI, ved hjælp af CluedIn GraphQL API og CluedIn Python SDK.

Lad os bruge et simpelt eksempel: Du vil automatisere oprettelsen af Vocabularies. Du kan gøre det fra CluedIn UI, men du foretrækker en automatiseret tilgang til at synkronisere Vocabularies fra et andet sted.

Det første du kan gøre er at oprette et test-Vocabulary i en browser og se, hvordan API-kaldene ser ud. Du kan gøre det med Network-fanen eller med hjælp fra GraphQL Network Inspector (bedre).

Lad os prøve begge tilgange. Først går jeg til UI og opretter et test-CluedIn Vocabulary, mens jeg har min Network-fane åben:

Vocabulary Network tab

Når jeg nu inspicerer GraphQL-forespørgsler, kan jeg se createVocabulary mutation-kaldet:

Network tab

Det er endnu nemmere at finde det rigtige kald med GraphQL Network Inspector:

GraphQL Inspector

Uanset hvordan vi fandt det, 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
}

Og variablerne:

{
  "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.

Først opretter jeg en fil med mine CluedIn-legitimationsoplysninger. Du kan også angive dem via environment-variabler:

{
  "domain": "172.167.52.102.sslip.io",
  "org_name": "foobar",
  "user_email": "admin@foobar.com",
  "user_password": "mysecretpassword"
}

Derefter installerer jeg CluedIn Python SDK:

%pip install cluedin

Herefter skal jeg "logge ind" i CluedIn for at få Access Token:

import cluedin

ctx = cluedin.Context.from_json_file('cluedin.json')
ctx.get_token()

ctx-objektet indeholder nu Access Token, og jeg kan bruge det 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)

Lad os teste det:

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": ""
      }
    }
  }
}

Tjek brugergrænsefladen:

New Vocabulary

Og det er det! Her er et par eksempler, jeg har brugt i rigtige projekter: