Verzameling van Hulpfuncties
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?
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?
_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
}
}
}