Funkcje schematu
Funkcje schematuKolekcja Funkcji Helper

Kolekcja Funkcji Helper

Included in the “Power Extensions” bundle

Kolekcja pól dodanych do schematu GraphQL, dostarczających przydatne funkcjonalności związane z adresami URL, formatowaniem dat, manipulacją tekstem i innymi operacjami.

Pola helper są Polami Globalnymi, dlatego są dodawane do każdego typu w schemacie GraphQL: w QueryRoot, ale również w Post, User itp.

Lista Pól Helper

Poniżej znajduje się lista pól helper.

_generateRandomString

Generuje losowy ciąg znaków.

Na przykład wykonanie tej query:

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

może zwrócić:

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

### `_htmlParseHTML5`

Przetwarza HTML przy użyciu parsera HTML5 i zwraca przetworzony HTML.

### `_objectConvertToNameValueEntryList`

Pobiera właściwości obiektu JSON w celu utworzenia listy wpisów JSON.

To pole służy do przekształcenia wyjścia `JSONObject` z pewnego pola w `[JSONObject]` przekazywany jako wejście do innego pola.

Na przykład odpowiedź z `_httpRequestHeaders` (z rozszerzenia **HTTP Request via Schema**) jest obiektem `StringValueJSONObject`, a nagłówki przekazywane jako wejście do `_sendHTTPRequest` mają typ `[HTTPRequestOptionHeaderInput!]`, gdzie każdy `HTTPRequestOptionHeaderInput` ma format:

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

Następująca query pozwala na połączenie wyjścia z wejściem:

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

_objectSpreadIDListValueAndFlip

Mając obiekt JSON z identyfikatorem jako kluczem i listą identyfikatorów jako wartością, odwraca go do innego obiektu JSON, w którym każdy identyfikator z listy staje się kluczem, a klucz staje się wartością.

Na przykład, jeśli podamy następujący obiekt JSON (mapujący identyfikatory posta na wszystkie jego posty tłumaczeń):

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

...po zastosowaniu pola _objectSpreadIDListValueAndFlip:

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

odpowiedź przyjmie postać:

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

_strConvertMarkdownToHTML

Konwertuje Markdown do HTML.

Ta metoda może pomóc w tworzeniu treści HTML przekazywanej jako wejście do pewnego pola lub mutacji. Tak jest w przypadku mutacji _sendEmail (z rozszerzenia Email Sender), która może wysyłać e-maile w formacie HTML.

Na przykład poniższa query używa treści Markdown do wygenerowania HTML wysyłanego w e-mailu:

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

Dekoduje ciąg XML jako JSON.

Ta metoda może pomóc w przetwarzaniu ciągu XML, takiego jak kanał RSS, poprzez konwersję go do obiektu JSON, którym można następnie manipulować za pomocą różnych pól w Gato GraphQL.

Ta 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>
  """)
}

...zwróci:

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

Przetwarza ciąg CSV na listę obiektów JSON.

To pole przyjmuje plik CSV jako wejście i konwertuje go do formatu, który może być wyodrębniany, iterowany i manipulowany przy użyciu innych pól funkcji.

Na przykład ta 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"""
  )
}

...zwróci:

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

Generuje dane w formacie CSV.

To pole przyjmuje macierz danych i tworzy ciąg CSV. Ten ciąg może następnie zostać przesłany do Biblioteki Mediów, załadowany do zasobnika S3 lub FileStack, lub do innych miejsc docelowych.

Na przykład ta 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],
  ]
)

...zwróci:

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

Dodaje parametry do adresu URL.

Wejście parametrów jest obiektem JSONObject w formacie nazwa parametru => wartość, co pozwala na przekazywanie wartości wielu typów, w tym String, Int, Lista (np. [String]) oraz JSONObject.

Ta 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"
        }
      }
    }
  )
}

...zwraca:

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

(Zdekodowany adres URL to 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.)

Należy zauważyć, że wartości null nie są dodawane do adresu URL.

Ta query:

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

...zwraca:

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

(Zdekodowany adres URL to https://gatographql.com?listParam[0]=1&listParam[2]=3&objectParam[dos]=2.)

_urlRemoveParams

Usuwa parametry z adresu URL.

Ta query:

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

...zwraca:

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

_arrayDeepFlatten

Wyodrębnia wszystkie wartości z mieszanej tablicy zawierającej pojedyncze wartości, tablice i obiekty, aż do ich najgłębszego poziomu, i zwraca je jako spłaszczoną tablicę.

To pole jest podobne do _arrayFlatten, ale obsługuje typy mieszane i rekurencyjnie spłaszcza zagnieżdżone struktury na dowolnej głębokości. Może przetwarzać:

  • Pojedyncze wartości (ciągi znaków, liczby, wartości logiczne, null)
  • Tablice (spłaszczane rekurencyjnie)
  • Obiekty (konwertowane do tablic i spłaszczane)

Ta query:

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

...zwraca:

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

_arrayFlatten

Spłaszcza tablicę tablic do jednej tablicy.

Ta 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"
      },
    ]
  ])
}

...zwraca:

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

Łączy elementy z tablic, wyodrębniając jeden element z każdej tablicy i scalając go ze wszystkimi pozostałymi pod odpowiednią etykietą.

Ta query:

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

...zwraca:

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

Mając tablicę obiektów JSON, z których wszystkie mają dwie wspólne właściwości (takie jak name i value), wyodrębnia wartości tych właściwości i tworzy obiekt JSON, gdzie jedna właściwość pełni rolę klucza, a druga wartości.

Ta query:

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

...zwraca:

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

_arrayOfJSONObjectsExtractProperty

Mając tablicę obiektów JSON, z których wszystkie mają wspólną właściwość, wyodrębnia wartość tej właściwości i zastępuje nią elementy tablicy.

Ta query:

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

...zwraca:

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

Przykłady

W połączeniu z rozszerzeniami HTTP Request via Schema i Field to Input możemy pobrać aktualnie żądany adres URL podczas wykonywania niestandardowego endpointu GraphQL lub utrwalonej query, dodać dodatkowe parametry i wysłać kolejne żądanie HTTP do nowego adresu URL.

Na przykład w tej query pobieramy identyfikatory użytkowników witryny i wykonujemy nową query GraphQL, przekazując ich identyfikator jako parametr:

{
  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
    }
  }
}