Schema Functions
Schema FunctionsPHP Functions via Schema

PHP Functions via Schema

Included in the “Power Extensions” bundle

ส่วนขยายนี้เพิ่มฟิลด์และไดเรกทิฟให้กับ GraphQL schema ซึ่งเปิดเผยฟังก์ชันการทำงานที่พบได้ทั่วไปในภาษาโปรแกรม (เช่น PHP)

คำอธิบาย

ฟิลด์ฟังก์ชันและไดเรกทิฟมีประโยชน์ในการจัดการข้อมูลหลังจากที่ดึงข้อมูลมาแล้ว ช่วยให้เราแปลงค่าฟิลด์ตามที่ต้องการ และมอบความสามารถในการนำเข้า/ส่งออกข้อมูลที่มีประสิทธิภาพ

queries ต่อไปนี้ ซึ่งประกอบด้วยฟิลด์ฟังก์ชันและไดเรกทิฟหลากหลาย:

{
  _intAdd(add: 15, to: 56)
  _intArraySum(array: [1, 2, 3, 4, 5])
 
  _arrayJoin(array: ["Hello", "to", "everyone"], separator: " ")
  _arrayItem(array: ["one", "two", "three", "four", "five"], position: 3)
  _arraySearch(array: ["uno", "dos", "tres", "cuatro", "cinco"], element: "tres")
  _arrayUnique(array: ["uno", "dos", "uno", "tres", "cuatro", "dos", "cinco", "dos"])
  _arrayMerge(arrays: [["uno", "dos", "uno"], ["tres", "cuatro", "dos", "cinco", "dos"]])
  _arrayDiff(arrays: [["uno", "dos"], ["tres", "cuatro", "dos"]])
  _arrayAddItem(array: ["uno", "dos"], value: "tres")
  _arraySetItem(array: ["uno", "dos"], index: 0, value: "tres")
  _arrayKeys(array: ["uno", "dos", "tres"])
  _arrayLength(array: ["uno", "dos", "tres"])
 
  _strRegexFindMatches(regex: "/https?:\\/\\/([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,})/", string: "In website https://gatographql.com there is more information")
  
  _strReplace(search: "https://", replaceWith: "http://", in: "https://gatographql.com")
  _strReplaceMultiple(search: ["https://", "gato"], replaceWith: ["http://", "dog"], in: "https://gatographql.com")
  _strRegexReplace(searchRegex: "/^https?:\\/\\//", replaceWith: "", in: "https://gatographql.com")
  _strRegexReplaceMultiple(searchRegex: ["/^https?:\\/\\//", "/([a-z]*)/"], replaceWith: ["", "$1$1"], in: "https://gatographql.com")
  
  _strStartsWith(search: "orld", in: "Hello world")
  _strEndsWith(search: "orld", in: "Hello world")
  _strUpperCase(text: "Hello world")
  _strLowerCase(text: "Hello world")
  _strTitleCase(text: "Hello world")
 
 
  falseToTrue: _echo(value: false) @boolOpposite
  trueToFalse: _echo(value: true) @boolOpposite
  plusOne: _echo(value: 2) @intAdd(number: 1)
  objectAddEntry: _echo(value: {
    user: "Leo",
    contact: {
      email: "leo@test.com"
    }
  })
    @objectAddEntry(key: "phone", value: "+0929094229", underPath: "contact")
    @objectAddEntry(key: "methods", value: {}, underPath: "contact")
    @objectAddEntry(key: "card", value: true, underPath: "contact.methods")
  upperCase: _echo(value: "Hello world") @strUpperCase
  lowerCase: _echo(value: "Hello world") @strLowerCase
  titleCase: _echo(value: "Hello world") @strTitleCase
  append: _echo(value: "Hello world") @strAppend(string: "!!!")
  prepend: _echo(value: "Hello world") @strPrepend(string: "!!!")
  arraySplice: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1)
  arraySpliceWithLength: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, length: 1)
  arraySpliceWithReplacement: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, replacement: ["cuatro", "cinco"])
  arraySpliceWithLengthAndReplacement: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, length: 1, replacement: ["cuatro", "cinco"])
  arrayUnique: _echo(value: ["uno", "dos", "uno", "tres", "cuatro", "dos", "cinco", "dos"]) @arrayUnique
  arrayMerge: _echo(value: ["uno", "dos", "uno"]) @arrayMerge(with: ["tres", "cuatro", "dos", "cinco", "dos"])
  arrayDiff: _echo(value: ["uno", "dos"]) @arrayDiff (against: ["tres", "cuatro", "dos"])
  arrayFilter: _echo(value: ["uno", "dos", null, "tres", "", "dos", []]) @arrayFilter
  objectKeepProperties: _echo(value: { user: "Leo", email: "leo@test.com" } )
    @objectKeepProperties(
      keys: ["user"]
    )
}

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

{
  "data": {
    "_intAdd": 71,
    "_intArraySum": 15,
    "_arrayJoin": "Hello to everyone",
    "_arrayItem": "four",
    "_arraySearch": 2,
    "_arrayUnique": [
      "uno",
      "dos",
      "tres",
      "cuatro",
      "cinco"
    ],
    "_arrayMerge": [
      "uno",
      "dos",
      "uno",
      "tres",
      "cuatro",
      "dos",
      "cinco",
      "dos"
    ],
    "_arrayDiff": [
      "uno"
    ],
    "_arrayAddItem": [
      "uno",
      "dos",
      "tres"
    ],
    "_arraySetItem": [
      "tres",
      "dos"
    ],
    "_arrayKeys": [
      0,
      1,
      2
    ],
    "_arrayLength": 3,
    "_strRegexFindMatches": [
      [
        "https:\/\/gatographql.com"
      ],
      [
        "gatographql.com"
      ]
    ],
    "_strReplace": "http://gatographql.com",
    "_strReplaceMultiple": "http://doggraphql.com",
    "_strRegexReplace": "gatographql.com",
    "_strRegexReplaceMultiple": "gatographqlgatographql.comcom",
    "_strStartsWith": false,
    "_strEndsWith": true,
    "_strUpperCase": "HELLO WORLD",
    "_strLowerCase": "hello world",
    "_strTitleCase": "Hello World",
    "falseToTrue": true,
    "trueToFalse": false,
    "plusOne": 3,
    "objectAddEntry": {
      "user": "Leo",
      "contact": {
        "email": "leo@test.com",
        "phone": "+0929094229",
        "methods": {
          "card": true
        }
      }
    },
    "upperCase": "HELLO WORLD",
    "lowerCase": "hello world",
    "titleCase": "Hello World",
    "append": "Hello world!!!",
    "prepend": "!!!Hello world",
    "arraySplice": [
      "uno"
    ],
    "arraySpliceWithLength": [
      "uno",
      "tres"
    ],
    "arraySpliceWithReplacement": [
      "uno",
      "cuatro",
      "cinco"
    ],
    "arraySpliceWithLengthAndReplacement": [
      "uno",
      "cuatro",
      "cinco",
      "tres"
    ],
    "arrayUnique": [
      "uno",
      "dos",
      "tres",
      "cuatro",
      "cinco"
    ],
    "arrayMerge": [
      "uno",
      "dos",
      "uno",
      "tres",
      "cuatro",
      "dos",
      "cinco",
      "dos"
    ],
    "arrayDiff": [
      "uno"
    ],
    "arrayFilter": [
      "uno",
      "dos",
      "tres",
      "dos"
    ],
    "objectKeepProperties": {
      "user": "Leo"
    }
  }
}

ฟิลด์ฟังก์ชัน

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

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

_and

คืนค่าผลลัพธ์การดำเนินการ AND ของคุณสมบัติบูลีนหลายรายการ

_arrayAddItem

เพิ่มองค์ประกอบเข้าไปในอาร์เรย์

_arrayCombine

สร้าง JSON object โดยใช้องค์ประกอบจากอาร์เรย์หนึ่งเป็นคีย์ และองค์ประกอบจากอาร์เรย์อื่นเป็นค่า

_arrayChunk

แบ่งอาร์เรย์ออกเป็นส่วนๆ

_arrayDiff

คืนค่าอาร์เรย์ที่ประกอบด้วยองค์ประกอบทั้งหมดจากอาร์เรย์แรกที่ไม่มีอยู่ในอาร์เรย์อื่นๆ

_arrayEncodeAsJSONString

เข้ารหัสอาร์เรย์เป็น JSON string

_arrayFill

สร้างอาร์เรย์ที่เติมด้วยค่า

_arrayFilter

กรององค์ประกอบที่เป็น null หรือว่างเปล่าออกจากอาร์เรย์

_arrayFlipToObject

สลับคีย์ตัวเลขทั้งหมดกับค่าที่เกี่ยวข้องในอาร์เรย์ คืนค่าเป็น object

_arrayInnerJoinJSONObjectProperties

เติม JSON object ภายในอาร์เรย์เป้าหมายด้วยคุณสมบัติจาก JSON object ในอาร์เรย์ต้นทาง เมื่อคุณสมบัติหนึ่งมีค่าเหมือนกันในทั้งสอง object

_arrayItem

เข้าถึงองค์ประกอบที่ตำแหน่งที่กำหนดในอาร์เรย์

_arrayJoin

รวมสตริงทั้งหมดในอาร์เรย์โดยใช้ตัวคั่นที่กำหนด

_arrayKeys

คีย์ในอาร์เรย์

_arrayLength

จำนวนองค์ประกอบในอาร์เรย์

_arrayMerge

รวมอาร์เรย์สองรายการขึ้นไปเข้าด้วยกัน

_arrayPad

เติมอาร์เรย์ให้มีความยาวตามที่กำหนดด้วยค่า

_arrayRandom

สุ่มเลือกองค์ประกอบหนึ่งรายการจากรายการที่ให้มา

_arrayRemoveFirst

ลบองค์ประกอบแรกในอาร์เรย์

_arrayRemoveLast

ลบองค์ประกอบสุดท้ายในอาร์เรย์

_arrayReverse

กลับลำดับอาร์เรย์

_arraySearch

ค้นหาตำแหน่งขององค์ประกอบในอาร์เรย์ หากพบจะคืนค่าตำแหน่ง มิฉะนั้นคืนค่า false

_arraySetItem

กำหนดองค์ประกอบที่ตำแหน่งหนึ่งของอาร์เรย์

_arraySlice

ตัดส่วนหนึ่งของอาร์เรย์ออกมา

_arraySplice

ลบส่วนหนึ่งของอาร์เรย์และแทนที่ด้วยสิ่งอื่น

_arrayUnique

กรององค์ประกอบที่ซ้ำกันทั้งหมดออกจากอาร์เรย์

_date

คืนค่าสตริงที่จัดรูปแบบตาม format string ที่กำหนด โดยใช้ timestamp (Unix timestamp) จำนวนเต็มที่กำหนด หรือเวลาปัจจุบันหากไม่มี timestamp กล่าวอีกนัยหนึ่ง timestamp เป็นตัวเลือกและค่าเริ่มต้นคือค่าของ time() (ให้มาผ่านฟิลด์ _time)

_echo

ส่งคืนอินพุตตามที่รับมา ไม่ว่าจะเป็นอะไรก็ตาม

_equals

ระบุว่าผลลัพธ์จากฟิลด์เท่ากับค่าหนึ่งหรือไม่

_floatCeil

ปัดเศษตัวเลขขึ้นเป็นจำนวนเต็มถัดไปที่สูงกว่า

_floatDivide

หารตัวเลขด้วยตัวเลขอื่น

_greaterThan

ระบุว่า number1 > number2 หรือไม่

_greaterThanOrEquals

ระบุว่า number1 >= number2 หรือไม่

_if

หากคุณสมบัติบูลีนเป็น true ให้ดำเนินการฟิลด์หนึ่ง มิฉะนั้นให้ดำเนินการอีกฟิลด์หนึ่ง

_inArray

ระบุว่าอาร์เรย์มีค่านั้นหรือไม่

_intAdd

บวกจำนวนเต็มกับจำนวนเต็มอื่น

_intArraySum

ผลรวมขององค์ประกอบจำนวนเต็มในอาร์เรย์

_intMultiply

คูณจำนวนเต็มกับจำนวนเต็มอื่น

_intSubtract

ลบจำนวนเต็มออกจากจำนวนเต็มอื่น

_isEmpty

ระบุว่าค่าว่างเปล่าหรือไม่

_isNull

ระบุว่าค่าเป็น null หรือไม่

_lowerThan

ระบุว่า number1 < number2 หรือไม่

_lowerThanOrEquals

ระบุว่า number1 <= number2 หรือไม่

_makeTime

คืนค่า Unix timestamp ที่สอดคล้องกับอาร์กิวเมนต์ที่กำหนด timestamp นี้เป็นจำนวนเต็มขนาดใหญ่ที่ประกอบด้วยจำนวนวินาทีระหว่าง Unix Epoch (1 มกราคม 1970 00:00:00 GMT) กับเวลาที่กำหนด

อาร์กิวเมนต์ที่เป็นตัวเลือกซึ่งถูกละเว้นหรือเป็น null จะถูกกำหนดเป็นค่าปัจจุบันตามวันที่และเวลาท้องถิ่น

_not

คืนค่าตรงข้ามของคุณสมบัติบูลีน

_notEmpty

ระบุว่าค่าไม่ว่างเปล่าหรือไม่

_notEquals

ค่าสองค่าไม่เท่ากันหรือไม่

_notInArray

ระบุว่าอาร์เรย์ไม่มีค่านั้นหรือไม่

_notNull

ระบุว่าค่าไม่ใช่ null หรือไม่

_objectAddEntry

เพิ่ม entry เข้าไปใน object

_objectEncodeAsJSONString

เข้ารหัส object เป็น JSON string

_objectFilter

กรององค์ประกอบที่เป็น null หรือว่างเปล่าออกจาก object

_objectFlip

สลับคีย์และค่าใน JSON object

_objectIntersectKey

คำนวณส่วนที่ตัดกันของ object โดยใช้คีย์เป็นเกณฑ์เปรียบเทียบ

_objectKeepProperties

เก็บเฉพาะคุณสมบัติที่กำหนดใน JSON object

_objectMerge

รวม object สองรายการขึ้นไปเข้าด้วยกัน

_objectProperties

ดึงคุณสมบัติใน JSON object

_objectProperty

ดึงคุณสมบัติจาก JSON object

_objectRemoveEntry

ลบ entry ออกจาก JSON object

_objectRemoveProperties

ลบ entry หนึ่งรายการขึ้นไปออกจาก JSON object

_objectValues

ดึงค่าใน JSON object

_or

คืนค่าผลลัพธ์การดำเนินการ OR ของคุณสมบัติบูลีนหลายรายการ

_propertyExistsInJSONObject

ระบุว่าคุณสมบัติมีอยู่ใน JSON object หรือไม่

_propertyIsSetInJSONObject

ระบุว่าคุณสมบัติมีอยู่และไม่เป็น null ใน JSON object หรือไม่

_sprintf

แทนที่ placeholder ภายในสตริงด้วยค่าที่กำหนด

_strAppend

ต่อสตริงเข้าท้ายสตริงอื่น

_strArrayReplace

แทนที่สตริงด้วยสตริงอื่นในอาร์เรย์

_strArrayReplaceMultiple

แทนที่รายการสตริงด้วยรายการสตริงอื่นในอาร์เรย์

_strContains

ระบุว่าสตริงมีสตริงอื่นอยู่หรือไม่

_strDecodeJSONObject

ถอดรหัสสตริงเป็น JSON object หรือคืนค่า null หากไม่สามารถทำได้

_strDecodeList

ถอดรหัสสตริงเป็นอาร์เรย์ (ของประเภทใดก็ได้) หรือคืนค่า null หากไม่สามารถทำได้

_strEndsWith

ระบุว่าสตริงลงท้ายด้วยสตริงอื่นหรือไม่

_strLength

ความยาวของสตริง

_strLowerCase

แปลงสตริงเป็นตัวพิมพ์เล็ก

_strPad

เติมสตริงให้มีความยาวที่กำหนดด้วยสตริงอื่น

_strPos

ตำแหน่งของ substring ภายในสตริง หรือ null หากไม่พบ

_strRegexFindMatches

ดำเนินการ regular expression เพื่อดึงการจับคู่ทั้งหมดจากสตริง

_strRegexReplace

ดำเนินการ regular expression เพื่อค้นหาและแทนที่สตริง

_strRegexReplaceMultiple

ดำเนินการ regular expressions เพื่อค้นหาและแทนที่สตริง

_strRepeat

ทำซ้ำสตริง

_strReplace

แทนที่สตริงด้วยสตริงอื่น

_strReplaceMultiple

แทนที่รายการสตริงด้วยรายการสตริงอื่น

_strReverse

กลับลำดับสตริง

_strShuffle

สับเปลี่ยนสตริงแบบสุ่ม

_strStartsWith

ระบุว่าสตริงเริ่มต้นด้วยสตริงอื่นหรือไม่

_strStripSlashes

คืนค่าสตริงที่ถูกลบ backslash ออก (\' กลายเป็น ' และต่อๆ ไป) Double backslash (\\) กลายเป็น single backslash (\)

_strSubstr

คืนค่าส่วนหนึ่งของสตริง

_strTitleCase

แปลงสตริงเป็น title case

_strToTime

แปลงคำอธิบายวันเวลาในรูปแบบข้อความเป็น Unix timestamp

_strTrim

ลบช่องว่าง (หรืออักขระอื่นๆ) จากต้นและท้ายของสตริง

_strUpperCase

แปลงสตริงเป็นตัวพิมพ์ใหญ่

_strWordCount

จำนวนคำในสตริง

_time

คืนค่าเวลาปัจจุบัน

ไดเรกทิฟฟังก์ชัน

ต่อไปนี้คือรายการไดเรกทิฟฟังก์ชัน

@arrayAddItem

เพิ่มองค์ประกอบเข้าไปในอาร์เรย์

@arrayDiff

คำนวณความแตกต่างกับอาร์เรย์อื่น

@arrayFilter

กรององค์ประกอบที่เป็น null หรือว่างเปล่าออกจากอาร์เรย์

@arrayMerge

รวมอาร์เรย์กับอาร์เรย์อื่น

@arrayPad

เติมอาร์เรย์ให้มีความยาวตามที่กำหนดด้วยค่า

@arrayRemoveFirst

ลบองค์ประกอบแรกในอาร์เรย์

@arrayRemoveLast

ลบองค์ประกอบสุดท้ายในอาร์เรย์

@arrayReverse

กลับลำดับอาร์เรย์

@arraySetItem

กำหนดองค์ประกอบที่ตำแหน่งหนึ่งของอาร์เรย์

@arraySlice

ตัดส่วนหนึ่งของอาร์เรย์ออกมา

@arraySplice

ลบส่วนหนึ่งของอาร์เรย์และแทนที่ด้วยสิ่งอื่น

@arrayUnique

กรององค์ประกอบที่ซ้ำกันทั้งหมดออกจากอาร์เรย์

@boolOpposite

แปลงบูลีนเป็นค่าตรงข้าม

@floatDivide

หารค่าฟิลด์ด้วยตัวเลข float

@intAdd

บวกจำนวนเต็มเข้ากับค่าฟิลด์

@intMultiply

คูณจำนวนเต็มกับค่าฟิลด์

@intSubtract

ลบจำนวนเต็มออกจากค่าฟิลด์

@objectAddEntry

เพิ่ม entry เข้าไปใน JSON object

@objectFilter

กรององค์ประกอบที่เป็น null หรือว่างเปล่าออกจาก object

@objectKeepProperties

เก็บเฉพาะคุณสมบัติที่กำหนดจาก JSON object

@objectRemoveEntry

ลบ entry ออกจาก JSON object

@objectRemoveProperties

ลบคุณสมบัติที่กำหนดออกจาก JSON object

@setNull

กำหนดค่าฟิลด์เป็น null

@strAppend

ต่อสตริงเข้าท้ายสตริงในค่าฟิลด์

@strLowerCase

แปลงสตริงเป็นตัวพิมพ์เล็ก

@strPad

เติมสตริงให้มีความยาวที่กำหนดด้วยสตริงอื่น

@strPrepend

ต่อสตริงเข้าต้นสตริงในค่าฟิลด์

@strRegexReplace

ดำเนินการ regular expression เพื่อค้นหาและแทนที่สตริง (ดู เอกสารสำหรับฟังก์ชัน PHP preg_replace)

@strRegexReplaceMultiple

ดำเนินการ regular expressions เพื่อค้นหาและแทนที่รายการสตริง (ดู เอกสารสำหรับฟังก์ชัน PHP preg_replace)

@strRepeat

ทำซ้ำสตริง

@strReplace

แทนที่สตริงด้วยสตริงอื่น

@strReplaceMultiple

แทนที่รายการสตริงด้วยรายการสตริงอื่น

@strReverse

กลับลำดับสตริง

@strShuffle

สับเปลี่ยนสตริงแบบสุ่ม

@strStripSlashes

คืนค่าสตริงที่ถูกลบ backslash ออก (\' กลายเป็น ' และต่อๆ ไป) Double backslash (\\) กลายเป็น single backslash

@strSubstr

คืนค่าส่วนหนึ่งของสตริง

@strTitleCase

แปลงสตริงเป็น title case

@strTrim

ลบช่องว่าง (หรืออักขระอื่นๆ) จากต้นและท้ายของสตริง

@strUpperCase

แปลงสตริงเป็นตัวพิมพ์ใหญ่

ตัวอย่าง

ฟิลด์ฟังก์ชัน

แม้เราจะมีฟิลด์ Post.hasComments แต่อาจต้องการค่าตรงข้าม แทนที่จะสร้างฟิลด์ใหม่ Post.notHasComments (ซึ่งต้องแก้ไขโค้ด PHP) เราสามารถใช้ฟีเจอร์ Field to Input เพื่อนำค่าจาก hasComments ใส่เข้าไปในฟิลด์ not ทำให้คำนวณค่าใหม่ได้ตลอดเวลาภายใน GraphQL query:

{
  posts {
    id
    hasComments
    notHasComments: _not(value: $__hasComments)
  }
}

เราสามารถนำฟิลด์ฟังก์ชันมาใช้หลายครั้งเพื่อการคำนวณที่ซับซ้อนขึ้น เช่น การสร้างฟิลด์ summary จากค่าของฟิลด์อื่นๆ:

{
  posts {
    id
    content @remove
    shortContent: _strSubstr(string: $__content, offset: 0, length: 150) @remove
    excerpt @remove
    isExcerptEmpty: _isEmpty(value: $__excerpt) @remove
    summary: _if(
      condition: $__isExcerptEmpty
      then: $__content
      else: $__excerpt
    )
  }
}

เมื่อใช้ร่วมกับส่วนขยาย HTTP Client เราสามารถสร้าง API endpoint ที่จะเชื่อมต่อแบบไดนามิก (ตามข้อมูลในไซต์ของเรา) แล้วดึงข้อมูลเฉพาะบางส่วนจากข้อมูลที่ได้รับกลับมา:

{
  users(
    pagination: { limit: 2 },
    sort: { order: ASC, by: ID }
  ) {
    id
    
    # Dynamically generate endpoint for the user
    endpoint: _arrayJoin(values: [
      "https://newapi.getpop.org/wp-json/wp/v2/users/",
      $__id,
      "?_fields=name,avatar_urls"
    ])
    
    # Retrieve the endpoint data
    endpointData: _sendJSONObjectItemHTTPRequest(input: { url: $__endpoint } )
 
    # Extract specific information
    userAvatar: _objectProperty(
      object: $__endpointData,
      by: {
        path: "avatar_urls.48"
      }
    )
  }
}

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

{
  "data": {
    "users": [
      {
        "id": 1,
        "endpoint": "https://newapi.getpop.org/wp-json/wp/v2/users/1?_fields=name,avatar_urls",
        "endpointData": {
          "name": "leo",
          "avatar_urls": {
            "24": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=24&d=mm&r=g",
            "48": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=48&d=mm&r=g",
            "96": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g"
          },
          "_links": {
            "self": [
              {
                "href": "https://newapi.getpop.org/wp-json/wp/v2/users/1"
              }
            ],
            "collection": [
              {
                "href": "https://newapi.getpop.org/wp-json/wp/v2/users"
              }
            ]
          }
        },
        "userAvatar": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=48&d=mm&r=g"
      },
      {
        "id": 2,
        "endpoint": "https://newapi.getpop.org/wp-json/wp/v2/users/2?_fields=name,avatar_urls",
        "endpointData": {
          "name": "themedemos",
          "avatar_urls": {
            "24": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=24&d=mm&r=g",
            "48": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=48&d=mm&r=g",
            "96": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=96&d=mm&r=g"
          },
          "_links": {
            "self": [
              {
                "href": "https://newapi.getpop.org/wp-json/wp/v2/users/2"
              }
            ],
            "collection": [
              {
                "href": "https://newapi.getpop.org/wp-json/wp/v2/users"
              }
            ]
          }
        },
        "userAvatar": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=48&d=mm&r=g"
      }
    ]
  }
}

ไดเรกทิฟฟังก์ชัน

หาก query นี้:

query {
  posts {
    title
  }
}

...ให้ผลลัพธ์ดังนี้:

{
  "data": {
    "posts": [
      {
        "title": "Hello world!"
      },
      {
        "title": "lovely weather"
      }
    ]
  }
}

...แล้ว query นี้:

query {
  posts {
    title @strUpperCase
  }
}

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

{
  "data": {
    "posts": [
      {
        "title": "HELLO WORLD!"
      },
      {
        "title": "LOVELY WEATHER"
      }
    ]
  }
}