Yardımcı Fonksiyon Koleksiyonu
GraphQL şemasına eklenen ve URL'ler, tarih biçimlendirme, metin işleme ve daha fazlasıyla ilgili faydalı işlevler sunan alan koleksiyonu.
Yardımcı alanlar Global Alanlardır; dolayısıyla GraphQL şemasındaki her tipe eklenir: QueryRoot'a, ayrıca Post, User vb. tiplerine de.
Yardımcı Alan Listesi
Yardımcı alanların listesi aşağıdadır.
_generateRandomString
Rastgele bir dize oluşturur.
Örneğin, şu query çalıştırıldığında:
{
_generateRandomString(
length: 24,
characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
)
}şu sonuç üretilebilir:
{
"data": {
"_generateRandomString": "BPXV1T1UJLH2S7VG3IO33FUP"
}
}
### `_htmlParseHTML5`
HTML5 ayrıştırıcısını kullanarak HTML'yi ayrıştırır ve ayrıştırılmış HTML'yi döndürür.
### `_objectConvertToNameValueEntryList`
Bir JSON nesnesinden özellikleri alarak JSON giriş listesi oluşturur.
Bu alan, bir alanın `JSONObject` çıktısını başka bir alana girdi olarak verilecek `[JSONObject]`'e dönüştürmek için kullanılır.
Örneğin, `_httpRequestHeaders`'ın (**HTTP Request via Schema** uzantısından) yanıtı bir `StringValueJSONObject`'tir; `_sendHTTPRequest`'e girdi olarak geçilen başlıklar ise `[HTTPRequestOptionHeaderInput!]` tipindedir ve her `HTTPRequestOptionHeaderInput` şu biçime sahiptir:
```json
{
"name": "...",
"value": "..."
}
Bu durumda, aşağıdaki query çıktı ile girdi arasında köprü kurmayı sağlar:
{
headers: _httpRequestHeaders
headersInput: _objectConvertToNameValueEntryList(
object: $__headers
)
_sendHTTPRequest(
input: {
url: "...",
options: {
headers: $__headersInput
}
}
) {
# ...
}
}_objectSpreadIDListValueAndFlip
Anahtar olarak ID, değer olarak ID listesi içeren bir JSON nesnesi alır ve listedeki her ID'nin anahtar, anahtarın ise değer olduğu başka bir JSON nesnesine çevirir.
Örneğin, aşağıdaki JSON nesnesi sağlandığında (bir gönderinin ID'sini tüm çeviri gönderilerinin ID'leriyle eşleştiren yapı):
{
"originPostToTranslationPostIDs": {
"1": [3, 4, 5],
"8": [10, 11],
"17": [19, 20, 21]
}
}..._objectSpreadIDListValueAndFlip alanı uygulandığında:
query SpreadAndFlipJSONObjectIDs(
$originPostToTranslationPostIDs: JSONObject!
) {
translationPostToOriginPostID: _objectSpreadIDListValueAndFlip(object: $originPostToTranslationPostIDs)
}yanıt şu hale gelir:
{
"translationPostToOriginPostID": {
"3": "1",
"4": "1",
"5": "1",
"10": "8",
"11": "8",
"19": "17",
"20": "17",
"21": "17"
}
}_strConvertMarkdownToHTML
Markdown'ı HTML'ye dönüştürür.
Bu yöntem, bir alana veya mutation'a girdi olarak sağlanan HTML içeriği üretmeye yardımcı olabilir. Bu durum, HTML biçiminde e-posta gönderebilen Email Sender uzantısındaki _sendEmail mutation'ı için geçerlidir.
Örneğin, şu query Markdown içeriğini kullanarak e-postada gönderilecek HTML'yi üretir:
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
Bir XML dizesini JSON olarak çözer.
Bu yöntem, RSS beslemesi gibi bir XML dizesini Gato GraphQL'deki çeşitli alanlar tarafından işlenebilecek bir JSON nesnesine dönüştürerek işlemeye yardımcı olabilir.
Şu 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>
""")
}...şunu üretir:
{
"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
Bir CSV dizesini JSON nesneleri listesine ayrıştırır.
Bu alan, girdi olarak bir CSV alır ve diğer fonksiyon alanları kullanılarak çıkarılabilir, üzerinde yineleme yapılabilir ve işlenebilir bir biçime dönüştürür.
Örneğin, şu 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"""
)
}...şunu üretir:
{
"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
Verileri CSV olarak çıktılar.
Bu alan, bir veri matrisi alır ve bir CSV dizesi üretir. Bu dize daha sonra Medya Kütüphanesi'ne yüklenebilir ya da bir S3 bucket'ına veya FileStack'e veya başka bir yere yüklenebilir.
Örneğin, şu 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],
]
)...şunu üretir:
{
"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
Bir URL'ye parametre ekler.
Parametre girdisi, param adı => değer biçiminde bir JSONObject'tir; bu sayede String, Int, Liste (örn: [String]) ve JSONObject dahil olmak üzere birden fazla tipteki değerleri geçirmemize olanak tanır.
Şu 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"
}
}
}
)
}...şunu üretir:
{
"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"
}
}(Çözümlenmiş URL: https://gatographql.com?
null değerlerinin URL'ye eklenmediğini lütfen unutmayın.
Şu query:
{
_urlAddParams(
url: "https://gatographql.com",
params: {
stringParam: null,
listParam: [1, null, 3],
objectParam: {
uno: null,
dos: 2
}
}
)
}...şunu üretir:
{
"data": {
"_urlAddParams": "https:\/\/gatographql.com?listParam%5B0%5D=1&listParam%5B2%5D=3&objectParam%5Bdos%5D=2"
}
}(Çözümlenmiş URL: https://gatographql.com?
_urlRemoveParams
Bir URL'den parametre kaldırır.
Şu query:
{
_urlRemoveParams(
url: "https://gatographql.com/?existingParam=existingValue&stringParam=originalValue&stringListParam[]=firstVal&stringListParam[]=secondVal&stringListParam[]=thirdVal",
names: [
"existingParam"
"stringParam"
"stringListParam"
]
)
}...şunu üretir:
{
"data": {
"_urlRemoveParams": "https:\/\/gatographql.com\/"
}
}_arrayDeepFlatten
Tek değerler, diziler ve nesneler içeren karışık bir diziden tüm değerleri en derin düzeye kadar çıkarır ve düzleştirilmiş bir dizi olarak döndürür.
Bu alan _arrayFlatten'e benzerdir ancak karışık tipleri işler ve herhangi bir derinlikte iç içe geçmiş yapıları özyinelemeli olarak düzleştirir. Şunları işleyebilir:
- Tekil değerler (dizeler, sayılar, boolean'lar, null)
- Diziler (özyinelemeli olarak düzleştirilir)
- Nesneler (diziye dönüştürülür ve düzleştirilir)
Şu query:
{
_arrayDeepFlatten(array: [
"single string",
["array", "of", "strings"],
{
key1: "value1",
key2: "value2"
},
42,
true,
null,
["nested", ["deep", "array"]],
{
nested: {
inner: "value"
}
}
])
}...şunu üretir:
{
"data": {
"_arrayDeepFlatten": [
"single string",
"array",
"of",
"strings",
"value1",
"value2",
42,
true,
null,
"nested",
"deep",
"array",
"value"
]
}
}_arrayFlatten
Dizi dizisini tek bir diziye düzleştirir.
Şu 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"
},
]
])
}...şunu üretir:
{
"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
Dizilerdeki öğeleri birleştirir; her diziden bir öğe çıkararak karşılık gelen etiket altında diğerleriyle birleştirir.
Şu query:
{
dataCombinations: _arrayGenerateAllCombinationsOfItems(labelItems: [
{
label: "person",
items: ["Sam", "Eric"]
},
{
label: "location",
items: ["Paris", "Rome"]
},
{
label: "meal",
items: ["Pasta", "Bagel"]
}
])
}...şunu üretir:
{
"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
İki ortak özelliğe (örneğin name ve value) sahip JSON nesnelerinden oluşan bir dizi alır, bu özelliklerin değerlerini çıkarır ve bir özelliği anahtar, diğerini değer olarak kullanarak bir JSON nesnesi oluşturur.
Şu query:
{
arrayToObject: _arrayOfJSONObjectsExtractPropertiesAndConvertToObject(
array: [
{
label: "person",
items: ["Sam", "Eric"]
},
{
label: "location",
items: ["Paris", "Rome"]
},
{
label: "meal",
items: ["Pasta", "Bagel"]
}
],
key: "label",
value: "items"
)
}...şunu üretir:
{
"data": {
"arrayToObject": {
"person": ["Sam", "Eric"],
"location": ["Paris", "Rome"],
"meal": ["Pasta", "Bagel"]
}
}
}_arrayOfJSONObjectsExtractProperty
Ortak bir özelliğe sahip JSON nesnelerinden oluşan bir dizi alır, bu özelliğin değerini çıkarır ve dizideki öğelerin yerini alacak şekilde döndürür.
Şu query:
{
arrayOfProperties: _arrayOfJSONObjectsExtractProperty(
array: [
{
label: "person",
items: ["Sam", "Eric"]
},
{
label: "location",
items: ["Paris", "Rome"]
},
{
label: "meal",
items: ["Pasta", "Bagel"]
}
],
key: "label"
)
}...şunu üretir:
{
"data": {
"arrayOfProperties": ["person", "location", "meal"]
}
}Örnekler
HTTP Request via Schema ve Field to Input uzantılarıyla birlikte kullanıldığında, bir GraphQL özel endpoint'i veya persisted query çalıştırılırken o anda talep edilen URL'yi alabilir, ekstra parametreler ekleyebilir ve yeni URL'ye başka bir HTTP isteği gönderebiliriz.
Örneğin, şu query'de web sitesindeki kullanıcıların ID'lerini alıyor ve ID'lerini parametre olarak geçirerek yeni bir GraphQL query çalıştırıyoruz:
{
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
}
}
}