Schemafuncties
SchemafunctiesVerzameling van Hulpfuncties

Verzameling van Hulpfuncties

Included in the “Power Extensions” bundle

Verzameling van velden die aan het GraphQL-schema zijn toegevoegd en handige functionaliteit bieden met betrekking tot URL's, datumopmaak, tekstmanipulatie en meer.

Hulpvelden zijn Globale Velden en worden daardoor aan elk type in het GraphQL-schema toegevoegd: in QueryRoot, maar ook in Post, User, enz.

Lijst van Hulpvelden

Dit is de lijst van hulpvelden.

_generateRandomString

Genereer een willekeurige tekenreeks.

Als je bijvoorbeeld deze query uitvoert:

{
  _generateRandomString(
    length: 24,
    characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
  )
}

kan dit het volgende opleveren:

{
  "data": {
    "_generateRandomString": "BPXV1T1UJLH2S7VG3IO33FUP"
  }
}

### `_htmlParseHTML5`

Verwerk HTML met een HTML5-parser en geef de verwerkte HTML terug.

### `_objectConvertToNameValueEntryList`

Haal de eigenschappen op uit een JSON-object om een lijst van JSON-vermeldingen te maken.

Dit veld wordt gebruikt om een `JSONObject`-uitvoer van een bepaald veld om te zetten naar een `[JSONObject]` die als invoer aan een ander veld wordt doorgegeven.

De respons van `_httpRequestHeaders` (uit de **HTTP Request via Schema**-extensie) is bijvoorbeeld een `StringValueJSONObject`, en de headers die als invoer worden doorgegeven aan `_sendHTTPRequest` zijn `[HTTPRequestOptionHeaderInput!]`, waarbij elke `HTTPRequestOptionHeaderInput` de volgende vorm heeft:

```json
{
  "name": "...",
  "value": "..."
}

De volgende query zorgt dan voor de koppeling tussen uitvoer en invoer:

{
  headers: _httpRequestHeaders
  headersInput: _objectConvertToNameValueEntryList(
    object: $__headers
  )
  _sendHTTPRequest(
    input: {
      url: "...",
      options: {
        headers: $__headersInput
      }
    }
  ) {
    # ...
  }
}

_objectSpreadIDListValueAndFlip

Gegeven een JSON-object met een ID als sleutel en een lijst van ID's als waarde, draai het om naar een ander JSON-object waarbij elk ID uit de lijst de sleutel wordt en de sleutel de waarde wordt.

Als we bijvoorbeeld het volgende JSON-object opgeven (dat de ID's van een bericht koppelt aan al zijn vertaalberichten):

{
  "originPostToTranslationPostIDs": {
    "1": [3, 4, 5],
    "8": [10, 11],
    "17": [19, 20, 21]
  }
}

...wordt bij het toepassen van het veld _objectSpreadIDListValueAndFlip:

query SpreadAndFlipJSONObjectIDs(
  $originPostToTranslationPostIDs: JSONObject!
) {
  translationPostToOriginPostID: _objectSpreadIDListValueAndFlip(object: $originPostToTranslationPostIDs)
}

de respons:

{
  "translationPostToOriginPostID": {
    "3": "1",
    "4": "1",
    "5": "1",
    "10": "8",
    "11": "8",
    "19": "17",
    "20": "17",
    "21": "17"
  }
}

_strConvertMarkdownToHTML

Converteert Markdown naar HTML.

Deze methode kan helpen bij het produceren van HTML-inhoud die als invoer aan een veld of mutatie wordt doorgegeven. Dat is het geval bij de mutatie _sendEmail (uit de Email Sender-extensie), die e-mails in HTML-formaat kan verzenden.

Deze query gebruikt bijvoorbeeld Markdown-inhoud om de HTML te produceren die in de e-mail wordt verzonden:

query GetPostData($postID: ID!) {
  post(by: {id: $postID}) {
    title @export(as: "postTitle")
    excerpt @export(as: "postExcerpt")
    url @export(as: "postLink")
    author {
      name @export(as: "postAuthorName")
      url @export(as: "postAuthorLink")
    }
  }
}
 
query GetEmailData @depends(on: "GetPostData") {
  emailMessageTemplate: _strConvertMarkdownToHTML(
    text: """
 
There is a new post by [{$postAuthorName}]({$postAuthorLink}):
 
**{$postTitle}**: {$postExcerpt}
 
[Read online]({$postLink})
 
    """
  )
  emailMessage: _strReplaceMultiple(
    search: ["{$postAuthorName}", "{$postAuthorLink}", "{$postTitle}", "{$postExcerpt}", "{$postLink}"],
    replaceWith: [$postAuthorName, $postAuthorLink, $postTitle, $postExcerpt, $postLink],
    in: $__emailMessageTemplate
  )
    @export(as: "emailMessage")
  subject: _sprintf(string: "New post created by %s", values: [$postAuthorName])
    @export(as: "emailSubject")
}
 
mutation SendEmail @depends(on: "GetEmailData") {
  _sendEmail(
    input: {
      to: "target@email.com"
      subject: $emailSubject
      messageAs: {
        html: $emailMessage
      }
    }
  ) {
    status
  }
}

_strDecodeXMLAsJSON

Decodeer een XML-tekenreeks als JSON.

Deze methode kan helpen bij het verwerken van een XML-tekenreeks, zoals een RSS-feed, door deze om te zetten naar een JSON-object dat kan worden gemanipuleerd met meerdere velden in Gato GraphQL.

Deze query:

{
  _strDecodeXMLAsJSON(xml: """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>  
  <book category="COOKING">  
    <title lang="en">Everyday Italian</title>  
    <author>Giada De Laurentiis</author>  
    <year>2005</year>  
    <price>30.00</price>  
  </book>  
  <book category="CHILDREN">  
    <title lang="en">Harry Potter</title>  
    <author>J K. Rowling</author>  
    <year>2005</year>  
    <price>29.99</price>  
  </book>  
  <book category="WEB">  
    <title lang="en">Learning XML</title>  
    <author>Erik T. Ray</author>  
    <year>2003</year>  
    <price>39.95</price>  
  </book>  
</bookstore>
  """)
}

...zal het volgende produceren:

{
  "data": {
    "_strDecodeXMLAsJSON": {
      "bookstore": {
        "book": [
          {
            "@category": "COOKING",
            "title": {
              "@lang": "en",
              "_": "Everyday Italian"
            },
            "author": "Giada De Laurentiis",
            "year": "2005",
            "price": "30.00"
          },
          {
            "@category": "CHILDREN",
            "title": {
              "@lang": "en",
              "_": "Harry Potter"
            },
            "author": "J K. Rowling",
            "year": "2005",
            "price": "29.99"
          },
          {
            "@category": "WEB",
            "title": {
              "@lang": "en",
              "_": "Learning XML"
            },
            "author": "Erik T. Ray",
            "year": "2003",
            "price": "39.95"
          }
        ]
      }
    }
  }
}

_strParseCSV

Verwerk een CSV-tekenreeks naar een lijst van JSON-objecten.

Dit veld neemt een CSV als invoer en converteert het naar een formaat dat kan worden geëxtraheerd, geïtereerd en gemanipuleerd met andere functievelden.

Deze query:

{
  _strParseCSV(
    string: """Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition"" (2008)","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large"" (2008)","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00"""
  )
}

...zal het volgende produceren:

{
  "data": {
    "_strParseCSV": [
      {
        "Year": "1997",
        "Make": "Ford",
        "Model": "E350",
        "Description": "ac, abs, moon",
        "Price": "3000.00"
      },
      {
        "Year": "1999",
        "Make": "Chevy",
        "Model": "Venture \"Extended Edition\" (2008)",
        "Description": "",
        "Price": "4900.00"
      },
      {
        "Year": "1999",
        "Make": "Chevy",
        "Model": "Venture \"Extended Edition, Very Large\" (2008)",
        "Description": "",
        "Price": "5000.00"
      },
      {
        "Year": "1996",
        "Make": "Jeep",
        "Model": "Grand Cherokee",
        "Description": "MUST SELL!\nair, moon roof, loaded",
        "Price": "4799.00"
      }
    ]
  }
}

_dataMatrixOutputAsCSV

Geef gegevens uit als een CSV.

Dit veld neemt een matrix van gegevens en produceert een CSV-tekenreeks. Deze tekenreeks kan vervolgens worden geĂĽpload naar de Mediabibliotheek, naar een S3-bucket of FileStack, of naar andere bestemmingen.

Deze query:

csv: _dataMatrixOutputAsCSV(
  fields: 
    ["Name", "Surname", "Year"]
  data: [
    ["John", "Smith", 2003],
    ["Pedro", "Gonzales", 2012],
    ["Manuel", "Perez", 2008],
    ["Jose", "Pereyra", 1999],
    ["Jacinto", "Bloomberg", 1998],
    ["Jun-E", "Song", 1983],
    ["Juan David", "Santamaria", 1943],
    ["Luis Miguel", null, 1966],
  ]
)

...zal het volgende produceren:

{
  "data": {
    "csv": "Name,Surname,Year\nJohn,Smith,2003\nPedro,Gonzales,2012\nManuel,Perez,2008\nJose,Pereyra,1999\nJacinto,Bloomberg,1998\nJun-E,Song,1983\nJuan David,Santamaria,1943\nLuis Miguel,,1966\n"
  }
}

_urlAddParams

Voeg parameters toe aan een URL.

De parameterinvoer is een JSONObject van parameternaam => waarde, waardoor we waarden van meerdere typen kunnen doorgeven, waaronder String, Int, Lijst (bijv. [String]) en ook JSONObject.

Deze query:

{
  _urlAddParams(
    url: "https://gatographql.com",
    params: {
      stringParam: "someValue",
      intParam: 5,
      stringListParam: ["value1", "value2"],
      intListParam: [8, 9, 4],
      objectParam: {
        "1st": "1stValue",
        "2nd": 2,
        "3rd": ["uno", 2.5]
        "4th": {
          nestedIn: "nestedOut"
        }
      }
    }
  )
}

...produceert:

{
  "data": {
    "_urlAddParams": "https:\/\/gatographql.com?stringParam=someValue&intParam=5&stringListParam%5B0%5D=value1&stringListParam%5B1%5D=value2&intListParam%5B0%5D=8&intListParam%5B1%5D=9&intListParam%5B2%5D=4&objectParam%5B1st%5D=1stValue&objectParam%5B2nd%5D=2&objectParam%5B3rd%5D%5B0%5D=uno&objectParam%5B3rd%5D%5B1%5D=2.5&objectParam%5B4th%5D%5BnestedIn%5D=nestedOut"
  }
}

(De gedecodeerde URL is https://gatographql.com?stringParam=someValue&intParam=5&stringListParam[0]=value1&stringListParam[1]=value2&intListParam[0]=8&intListParam[1]=9&intListParam[2]=4&objectParam[1st]=1stValue&objectParam[2nd]=2&objectParam[3rd][0]=uno&objectParam[3rd][1]=2.5&objectParam[4th][nestedIn]=nestedOut.)

Let op: null-waarden worden niet aan de URL toegevoegd.

Deze query:

{
  _urlAddParams(
    url: "https://gatographql.com",
    params: {
      stringParam: null,
      listParam: [1, null, 3],
      objectParam: {
        uno: null,
        dos: 2
      }
    }
  )
}

...produceert:

{
  "data": {
    "_urlAddParams": "https:\/\/gatographql.com?listParam%5B0%5D=1&listParam%5B2%5D=3&objectParam%5Bdos%5D=2"
  }
}

(De gedecodeerde URL is https://gatographql.com?listParam[0]=1&listParam[2]=3&objectParam[dos]=2.)

_urlRemoveParams

Verwijder parameters uit een URL.

Deze query:

{
  _urlRemoveParams(
    url: "https://gatographql.com/?existingParam=existingValue&stringParam=originalValue&stringListParam[]=firstVal&stringListParam[]=secondVal&stringListParam[]=thirdVal",
    names: [
      "existingParam"
      "stringParam"
      "stringListParam"
    ]
  )
}

...produceert:

{
  "data": {
    "_urlRemoveParams": "https:\/\/gatographql.com\/"
  }
}

_arrayDeepFlatten

Extraheer alle waarden uit een gemengde array met enkelvoudige waarden, arrays en objecten, tot hun diepste niveau, en geef ze terug als een afgevlakte array.

Dit veld is vergelijkbaar met _arrayFlatten, maar het verwerkt gemengde typen en vlakt geneste structuren op elk diepteniveau recursief af. Het kan het volgende verwerken:

  • Enkelvoudige waarden (tekenreeksen, getallen, booleans, null)
  • Arrays (recursief afgevlakt)
  • Objecten (omgezet naar arrays en afgevlakt)

Deze query:

{
  _arrayDeepFlatten(array: [
    "single string",
    ["array", "of", "strings"],
    {
      key1: "value1",
      key2: "value2"
    },
    42,
    true,
    null,
    ["nested", ["deep", "array"]],
    {
      nested: {
        inner: "value"
      }
    }
  ])
}

...produceert:

{
  "data": {
    "_arrayDeepFlatten": [
      "single string",
      "array",
      "of",
      "strings",
      "value1",
      "value2",
      42,
      true,
      null,
      "nested",
      "deep",
      "array",
      "value"
    ]
  }
}

_arrayFlatten

Vlak een array van arrays af tot één array.

Deze query:

{
  _arrayFlatten(array: [
    [
      {
        "id": 2302,
        "url": "https://mysite.com/media/143"
      }
    ],
    [
      {
        "id": 2303,
        "url": "https://mysite.com/media/146"
      },
      {
        "id": 2304,
        "url": "https://mysite.com/media/147"
      },
    ]
  ])
}

...produceert:

{
  "data": {
    "_arrayFlatten": [
      {
        "id": 2302,
        "url": "https://mysite.com/media/143"
      },
      {
        "id": 2303,
        "url": "https://mysite.com/media/146"
      },
      {
        "id": 2304,
        "url": "https://mysite.com/media/147"
      }
    ]
  }
}

_arrayGenerateAllCombinationsOfItems

Combineer de elementen in de arrays door één item uit elke array te extraheren en samen te voegen met alle andere, onder het bijbehorende label.

Deze query:

{
  dataCombinations: _arrayGenerateAllCombinationsOfItems(labelItems: [
    {
      label: "person",
      items: ["Sam", "Eric"]
    },
    {
      label: "location",
      items: ["Paris", "Rome"]
    },
    {
      label: "meal",
      items: ["Pasta", "Bagel"]
    }
  ])
}

...produceert:

{
  "data": {
    "dataCombinations": [
      {
        "person": "Sam",
        "location": "Paris",
        "meal": "Pasta"
      },
      {
        "person": "Sam",
        "location": "Paris",
        "meal": "Bagel"
      },
      {
        "person": "Sam",
        "location": "Rome",
        "meal": "Pasta"
      },
      {
        "person": "Sam",
        "location": "Rome",
        "meal": "Bagel"
      },
      {
        "person": "Eric",
        "location": "Paris",
        "meal": "Pasta"
      },
      {
        "person": "Eric",
        "location": "Paris",
        "meal": "Bagel"
      },
      {
        "person": "Eric",
        "location": "Rome",
        "meal": "Pasta"
      },
      {
        "person": "Eric",
        "location": "Rome",
        "meal": "Bagel"
      }
    ]
  }
}

_arrayOfJSONObjectsExtractPropertiesAndConvertToObject

Gegeven een array van JSON-objecten die allemaal twee gemeenschappelijke eigenschappen hebben (zoals name en value), extraheer de waarden van deze eigenschappen en maak een JSON-object, waarbij de ene eigenschap als sleutel dient en de andere als waarde.

Deze query:

{
  arrayToObject: _arrayOfJSONObjectsExtractPropertiesAndConvertToObject(
    array: [
      {
        label: "person",
        items: ["Sam", "Eric"]
      },
      {
        label: "location",
        items: ["Paris", "Rome"]
      },
      {
        label: "meal",
        items: ["Pasta", "Bagel"]
      }
    ],
    key: "label",
    value: "items"
  )
}

...produceert:

{
  "data": {
    "arrayToObject": {
      "person": ["Sam", "Eric"],
      "location": ["Paris", "Rome"],
      "meal": ["Pasta", "Bagel"]
    }
  }
}

_arrayOfJSONObjectsExtractProperty

Gegeven een array van JSON-objecten die allemaal een gemeenschappelijke eigenschap hebben, extraheer de waarde van deze eigenschap en vervang de elementen in de array daarmee.

Deze query:

{
  arrayOfProperties: _arrayOfJSONObjectsExtractProperty(
    array: [
      {
        label: "person",
        items: ["Sam", "Eric"]
      },
      {
        label: "location",
        items: ["Paris", "Rome"]
      },
      {
        label: "meal",
        items: ["Pasta", "Bagel"]
      }
    ],
    key: "label"
  )
}

...produceert:

{
  "data": {
    "arrayOfProperties": ["person", "location", "meal"]
  }
}

Voorbeelden

In combinatie met de extensies HTTP Request via Schema en Field to Input kunnen we de momenteel opgevraagde URL ophalen bij het uitvoeren van een aangepast GraphQL-eindpunt of een persistente query, extra parameters toevoegen en een nieuw HTTP-verzoek naar de nieuwe URL sturen.

In deze query halen we bijvoorbeeld de ID's op van de gebruikers op de website en voeren een nieuwe GraphQL-query uit waarbij hun ID als parameter wordt doorgegeven:

{
  users {
    userID: id
    url: _urlAddParams(
      url: "https://somewebsite/endpoint/user-data",
      params: {
        userID: $__userID
      }
    )
    headers: _httpRequestHeaders
    headerNameValueEntryList: _objectConvertToNameValueEntryList(
      object: $__headers
    )
    _sendHTTPRequest(input: {
      url: $__url
      options: {
        headers: $__headerNameValueEntryList
      }
    }) {
      statusCode
      contentType
      body
    }
  }
}