คอลเลกชันฟังก์ชันช่วยเหลือ
คอลเลกชันของฟิลด์ที่เพิ่มเข้าไปในสคีมา 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?
โปรดทราบว่าค่า 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?
_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
}
}
}