Hàm Schema
Hàm SchemaBộ Sưu Tập Hàm Trợ Giúp

Bộ Sưu Tập Hàm Trợ Giúp

Included in the “Power Extensions” bundle

Bộ sưu tập các trường được thêm vào schema GraphQL, cung cấp các chức năng hữu ích liên quan đến URL, định dạng ngày tháng, thao tác văn bản và nhiều thứ khác.

Các trường helper là Trường Toàn Cục, do đó chúng được thêm vào mọi kiểu dữ liệu trong schema GraphQL: trong QueryRoot, nhưng cũng trong Post, User, v.v.

Danh Sách Các Trường Helper

Đây là danh sách các trường helper.

_generateRandomString

Tạo một chuỗi ngẫu nhiên.

Ví dụ, khi chạy query này:

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

có thể tạo ra:

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

### `_htmlParseHTML5`

Phân tích cú pháp HTML bằng bộ phân tích cú pháp HTML5 và trả về HTML đã được phân tích.

### `_objectConvertToNameValueEntryList`

Lấy các thuộc tính từ một đối tượng JSON để tạo danh sách các mục nhập JSON.

Trường này được dùng để chuyển đổi đầu ra `JSONObject` từ một trường nào đó thành `[JSONObject]` làm đầu vào cho trường khác.

Ví dụ, phản hồi từ `_httpRequestHeaders` (từ tiện ích mở rộng **HTTP Request via Schema**) là một `StringValueJSONObject`, và các header được truyền vào làm đầu vào trong `_sendHTTPRequest` là `[HTTPRequestOptionHeaderInput!]`, với mỗi `HTTPRequestOptionHeaderInput` có dạng:

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

Khi đó, query sau cho phép kết nối giữa đầu ra và đầu vào:

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

_objectSpreadIDListValueAndFlip

Cho một đối tượng JSON với ID làm khóa và danh sách các ID làm giá trị, lật ngược nó thành một đối tượng JSON khác, trong đó mỗi ID trong danh sách trở thành khóa và khóa ban đầu trở thành giá trị.

Ví dụ, nếu chúng ta cung cấp đối tượng JSON sau (ánh xạ các ID từ một bài đăng đến tất cả các bài đăng dịch của nó):

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

...khi áp dụng trường _objectSpreadIDListValueAndFlip:

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

phản hồi sẽ trở thành:

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

_strConvertMarkdownToHTML

Chuyển đổi Markdown sang HTML.

Phương thức này có thể giúp tạo nội dung HTML được cung cấp làm đầu vào cho một trường hoặc mutation. Đó là trường hợp của mutation _sendEmail (từ tiện ích mở rộng Email Sender), có thể gửi email ở định dạng HTML.

Ví dụ, query này sử dụng nội dung Markdown để tạo HTML để gửi trong email:

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

Giải mã chuỗi XML thành JSON.

Phương thức này có thể giúp xử lý chuỗi XML, chẳng hạn như nguồn cấp RSS, bằng cách chuyển đổi nó thành đối tượng JSON có thể được thao tác bởi nhiều trường trong Gato GraphQL.

Query này:

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

...sẽ tạo ra:

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

Phân tích cú pháp chuỗi CSV thành danh sách các đối tượng JSON.

Trường này sẽ nhận CSV làm đầu vào và chuyển đổi nó thành định dạng có thể được trích xuất, lặp lại và thao tác bằng các trường hàm khác.

Ví dụ, query này:

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

...sẽ tạo ra:

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

Xuất dữ liệu dưới dạng CSV.

Trường này sẽ nhận một ma trận dữ liệu và tạo ra một chuỗi CSV. Chuỗi này sau đó có thể được tải lên Thư Viện Media, hoặc tải lên bucket S3 hay FileStack, hoặc các nơi khác.

Ví dụ, query này:

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],
  ]
)

...sẽ tạo ra:

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

Thêm tham số vào URL.

Đầu vào tham số là một JSONObject gồm tên tham số => giá trị, cho phép chúng ta truyền các giá trị của nhiều kiểu dữ liệu, bao gồm String, Int, List (ví dụ: [String]) và cả JSONObject.

Query này:

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

...tạo ra:

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

(URL đã giải mã là 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.)

Lưu ý rằng các giá trị null không được thêm vào URL.

Query này:

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

...tạo ra:

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

(URL đã giải mã là https://gatographql.com?listParam[0]=1&listParam[2]=3&objectParam[dos]=2.)

_urlRemoveParams

Xóa tham số khỏi URL.

Query này:

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

...tạo ra:

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

_arrayDeepFlatten

Trích xuất tất cả các giá trị từ một mảng hỗn hợp chứa các giá trị đơn lẻ, mảng và đối tượng, đến cấp độ sâu nhất của chúng, và trả về chúng dưới dạng mảng phẳng.

Trường này tương tự như _arrayFlatten, nhưng xử lý các kiểu hỗn hợp và làm phẳng đệ quy các cấu trúc lồng nhau ở bất kỳ độ sâu nào. Nó có thể xử lý:

  • Các giá trị đơn lẻ (chuỗi, số, boolean, null)
  • Mảng (được làm phẳng đệ quy)
  • Đối tượng (được chuyển đổi thành mảng và làm phẳng)

Query này:

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

...tạo ra:

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

_arrayFlatten

Làm phẳng một mảng các mảng thành một mảng.

Query này:

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

...tạo ra:

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

Kết hợp các phần tử trong các mảng, trích xuất một mục từ mỗi mảng và hợp nhất nó với tất cả các mục khác, dưới nhãn tương ứng.

Query này:

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

...tạo ra:

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

Cho một mảng các đối tượng JSON, với tất cả chúng đều có hai thuộc tính chung (chẳng hạn như namevalue), trích xuất các giá trị của các thuộc tính này và tạo một đối tượng JSON, với một thuộc tính làm khóa và thuộc tính kia làm giá trị.

Query này:

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

...tạo ra:

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

_arrayOfJSONObjectsExtractProperty

Cho một mảng các đối tượng JSON, với tất cả chúng đều có một thuộc tính chung, trích xuất giá trị của thuộc tính này và thay thế nó làm các phần tử trong mảng.

Query này:

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

...tạo ra:

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

Ví Dụ

Kết hợp với các tiện ích mở rộng HTTP Request via SchemaField to Input, chúng ta có thể lấy URL đang được yêu cầu hiện tại khi thực thi một endpoint GraphQL tùy chỉnh hoặc persisted query, thêm các tham số bổ sung, và gửi một yêu cầu HTTP khác đến URL mới.

Ví dụ, trong query này, chúng ta lấy các ID của người dùng trên website và thực thi một query GraphQL mới truyền ID của họ làm tham số:

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