Schema Functions
Schema Functionsคอลเลกชันฟังก์ชันช่วยเหลือ

คอลเลกชันฟังก์ชันช่วยเหลือ

Included in the “Power Extensions” bundle

คอลเลกชันของฟิลด์ที่เพิ่มเข้าไปในสคีมา GraphQL เพื่อให้ฟังก์ชันการทำงานที่มีประโยชน์เกี่ยวกับ URL การจัดรูปแบบวันที่ การจัดการข้อความ และอื่นๆ

ฟิลด์ช่วยเหลือเป็น Global Fields ดังนั้นจึงถูกเพิ่มเข้าไปในทุกประเภทในสคีมา GraphQL: ทั้งใน QueryRoot รวมถึง Post, User และอื่นๆ

รายการฟิลด์ช่วยเหลือ

ต่อไปนี้คือรายการของฟิลด์ช่วยเหลือ

_generateRandomString

สร้างสตริงแบบสุ่ม

ตัวอย่างเช่น เมื่อรัน queries นี้:

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

อาจให้ผลลัพธ์:

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

### `_htmlParseHTML5`

แยกวิเคราะห์ HTML โดยใช้ตัวแยกวิเคราะห์ HTML5 และส่งคืน HTML ที่แยกวิเคราะห์แล้ว

### `_objectConvertToNameValueEntryList`

ดึงข้อมูลคุณสมบัติจากออบเจกต์ JSON เพื่อสร้างรายการของรายการ JSON

ฟิลด์นี้ใช้เพื่อแปลงผลลัพธ์ `JSONObject` จากฟิลด์หนึ่ง ให้กลายเป็น `[JSONObject]` ที่ป้อนเข้าสู่ฟิลด์อื่น

ตัวอย่างเช่น การตอบสนองจาก `_httpRequestHeaders` (จากส่วนขยาย **HTTP Request via Schema**) เป็น `StringValueJSONObject` และส่วนหัวที่ส่งเป็นอินพุตใน `_sendHTTPRequest` เป็น `[HTTPRequestOptionHeaderInput!]` โดยแต่ละ `HTTPRequestOptionHeaderInput` มีรูปแบบ:

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

จากนั้น queries ต่อไปนี้ช่วยเชื่อมระหว่างผลลัพธ์และอินพุต:

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

_objectSpreadIDListValueAndFlip

รับออบเจกต์ JSON ที่มี ID เป็นคีย์ และรายการของ ID เป็นค่า แล้วพลิกเป็นออบเจกต์ JSON อีกตัว โดยที่แต่ละ ID ในรายการจะกลายเป็นคีย์ และคีย์เดิมจะกลายเป็นค่า

ตัวอย่างเช่น ถ้าเราระบุออบเจกต์ JSON ต่อไปนี้ (การแมป ID ของโพสต์ไปยังโพสต์แปลทั้งหมด):

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

...เมื่อใช้ฟิลด์ _objectSpreadIDListValueAndFlip:

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

การตอบสนองจะกลายเป็น:

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

_strConvertMarkdownToHTML

แปลง Markdown เป็น HTML

เมธอดนี้ช่วยสร้างเนื้อหา HTML ที่ป้อนเป็นอินพุตให้กับฟิลด์หรือ mutation บางตัว เช่น mutation _sendEmail (จากส่วนขยาย Email Sender) ซึ่งสามารถส่งอีเมลในรูปแบบ HTML ได้

ตัวอย่างเช่น queries นี้ใช้เนื้อหา Markdown เพื่อสร้าง HTML ที่จะส่งในอีเมล:

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

ถอดรหัสสตริง XML เป็น JSON

เมธอดนี้ช่วยประมวลผลสตริง XML เช่น RSS feed โดยแปลงเป็นออบเจกต์ JSON ที่สามารถจัดการได้โดยฟิลด์หลายตัวใน Gato GraphQL

queries นี้:

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

...จะให้ผลลัพธ์:

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

แยกวิเคราะห์สตริง CSV เป็นรายการของออบเจกต์ JSON

ฟิลด์นี้รับ CSV เป็นอินพุตและแปลงให้อยู่ในรูปแบบที่สามารถดึงข้อมูล วนซ้ำ และจัดการโดยใช้ฟิลด์ฟังก์ชันอื่นๆ

ตัวอย่างเช่น queries นี้:

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

...จะให้ผลลัพธ์:

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

ส่งออกข้อมูลเป็น CSV

ฟิลด์นี้รับเมทริกซ์ของข้อมูลและสร้างสตริง CSV สตริงนี้สามารถอัปโหลดไปยัง Media Library หรืออัปโหลดไปยัง S3 bucket หรือ FileStack หรืออื่นๆ

ตัวอย่างเช่น queries นี้:

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

...จะให้ผลลัพธ์:

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

เพิ่มพารามิเตอร์ให้กับ URL

อินพุตพารามิเตอร์เป็น JSONObject ของ ชื่อพารามิเตอร์ => ค่า ซึ่งช่วยให้เราส่งค่าได้หลายประเภท รวมถึง String, Int, List (เช่น: [String]) และ JSONObject

queries นี้:

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

...ให้ผลลัพธ์:

{
  "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 ที่ถอดรหัสแล้วคือ 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.)

โปรดทราบว่าค่า null จะไม่ถูกเพิ่มเข้าไปใน URL

queries นี้:

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

...ให้ผลลัพธ์:

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

(URL ที่ถอดรหัสแล้วคือ https://gatographql.com?listParam[0]=1&listParam[2]=3&objectParam[dos]=2.)

_urlRemoveParams

ลบพารามิเตอร์ออกจาก URL

queries นี้:

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

...ให้ผลลัพธ์:

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

_arrayDeepFlatten

ดึงค่าทั้งหมดจากอาร์เรย์แบบผสมที่มีค่าเดี่ยว อาร์เรย์ และออบเจกต์ จนถึงระดับลึกสุด และส่งคืนเป็นอาร์เรย์แบบแบน

ฟิลด์นี้คล้ายกับ _arrayFlatten แต่รองรับประเภทข้อมูลแบบผสมและทำการแบนโครงสร้างที่ซ้อนกันแบบซ้ำๆ ในทุกระดับความลึก สามารถประมวลผล:

  • ค่าเดี่ยว (สตริง ตัวเลข บูลีน null)
  • อาร์เรย์ (แบนแบบซ้ำๆ)
  • ออบเจกต์ (แปลงเป็นอาร์เรย์และทำการแบน)

queries นี้:

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

...ให้ผลลัพธ์:

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

_arrayFlatten

แบนอาร์เรย์ของอาร์เรย์เป็นอาร์เรย์เดียว

queries นี้:

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

...ให้ผลลัพธ์:

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

รวมองค์ประกอบในอาร์เรย์โดยดึงรายการหนึ่งจากแต่ละอาร์เรย์และรวมเข้ากับรายการอื่นๆ ทั้งหมด ภายใต้ป้ายกำกับที่สอดคล้องกัน

queries นี้:

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

...ให้ผลลัพธ์:

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

รับอาร์เรย์ของออบเจกต์ JSON โดยที่ออบเจกต์ทั้งหมดมีสองคุณสมบัติร่วมกัน (เช่น name และ value) ดึงค่าของคุณสมบัติเหล่านี้และสร้างออบเจกต์ JSON โดยใช้คุณสมบัติหนึ่งเป็นคีย์และอีกคุณสมบัติหนึ่งเป็นค่า

queries นี้:

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

...ให้ผลลัพธ์:

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

_arrayOfJSONObjectsExtractProperty

รับอาร์เรย์ของออบเจกต์ JSON โดยที่ออบเจกต์ทั้งหมดมีคุณสมบัติร่วมกัน ดึงค่าของคุณสมบัตินั้นและแทนที่เป็นองค์ประกอบในอาร์เรย์

queries นี้:

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

...ให้ผลลัพธ์:

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

ตัวอย่าง

เมื่อใช้ร่วมกับส่วนขยาย HTTP Request via Schema และ Field to Input เราสามารถดึง URL ที่ถูกร้องขอในขณะที่รัน GraphQL custom endpoint หรือ persisted query เพิ่มพารามิเตอร์เพิ่มเติม และส่ง HTTP request อีกครั้งไปยัง URL ใหม่

ตัวอย่างเช่น ใน queries นี้ เราดึง ID ของผู้ใช้ในเว็บไซต์และรัน GraphQL queries ใหม่โดยส่ง ID ของพวกเขาเป็นพารามิเตอร์:

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