Schema Functions
เปิดเผยฟังก์ชันการทำงานจากภาษาโปรแกรม PHP ผ่านฟิลด์และไดเรกทีฟของ GraphQL

Click to watch tutorial video - 07:54
GraphQL schema ได้รับการเพิ่มฟิลด์และไดเรกทีฟที่เปิดเผยฟังก์ชันการทำงานจากภาษาโปรแกรม PHP
ฟิลด์ฟังก์ชัน
ฟิลด์ฟังก์ชันเป็นฟิลด์ระดับโกลบอล จึงถูกเพิ่มเข้าไปในทุก type ใน GraphQL schema ได้แก่ QueryRoot รวมถึง Post, User และอื่นๆ
ฟิลด์ฟังก์ชันมีประโยชน์สำหรับการจัดการข้อมูลหลังจากที่ดึงข้อมูลมาแล้ว ช่วยให้เราสามารถแปลงค่าของฟิลด์ในรูปแบบที่ต้องการ และมอบความสามารถในการนำเข้า/ส่งออกข้อมูลที่ทรงพลัง
ตัวอย่างเช่น แม้เรามีฟิลด์ Post.hasComments แต่เราอาจต้องการค่าตรงกันข้าม แทนที่จะสร้างฟิลด์ใหม่ Post.notHasComments (ซึ่งต้องแก้ไขโค้ด PHP) เราสามารถใช้ฟีเจอร์ Field to Input เพื่อส่งค่าจาก hasComments เข้าสู่ฟิลด์ not และคำนวณค่าใหม่ภายใน GraphQL query ได้เลย:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}ไดเรกทีฟฟังก์ชัน
GraphQL schema ได้รับการเพิ่มไดเรกทีฟที่เปิดเผยฟังก์ชันการทำงานที่พบได้ทั่วไปในภาษาโปรแกรม (เช่น PHP)
ฟิลด์ไดเรกทีฟมีประโยชน์สำหรับการจัดการข้อมูลหลังจากที่ดึงข้อมูลมาแล้ว ช่วยให้เราสามารถแปลงค่าของฟิลด์ในรูปแบบที่ต้องการ และมอบความสามารถในการนำเข้า/ส่งออกข้อมูลที่ทรงพลัง
ตัวอย่างเช่น query นี้:
query {
posts {
title @strUpperCase
}
}...จะให้ผลลัพธ์ดังนี้:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}ฟิลด์ Helper
GraphQL schema ได้รับการเพิ่มฟิลด์ที่มอบฟังก์ชันการทำงาน helper ที่ใช้บ่อย
ฟิลด์ helper เป็นฟิลด์ระดับโกลบอล จึงถูกเพิ่มเข้าไปในทุก type ใน GraphQL schema ได้แก่ QueryRoot รวมถึง Post, User และอื่นๆ
ใน query นี้ เราดึง ID ของผู้ใช้บนเว็บไซต์และส่ง GraphQL query ใหม่โดยส่ง ID ของพวกเขาเป็น parameter:
query {
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
}
}
}ฟิลด์ Environment
GraphQL schema ได้รับการเพิ่มฟิลด์ระดับโกลบอล _env ซึ่งช่วยให้ดึงค่าจาก environment variable หรือจาก PHP constant (ที่กำหนดไว้ใน wp-config.php เป็นหลัก แต่อาจกำหนดไว้ที่อื่นก็ได้)
query นี้ดึง environment constant GITHUB_ACCESS_TOKEN ที่เราอาจตั้งค่าไว้เพื่อเข้าถึง private repository บน GitHub:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}ตัวส่งอีเมล
GraphQL schema ได้รับการเพิ่ม global mutation _sendEmail
Mutation _sendEmail ส่งอีเมลโดยเรียกใช้ฟังก์ชัน wp_mail ของ WordPress ด้วยเหตุนี้จึงใช้การกำหนดค่าที่ตั้งไว้สำหรับการส่งอีเมลใน WordPress (เช่น SMTP provider ที่ใช้)
อีเมลสามารถส่งพร้อม content type "text" หรือ "HTML" ขึ้นอยู่กับค่าของ input messageAs (ซึ่งเป็น "oneof" InputObject ดังนั้นจึงระบุได้เพียงหนึ่ง property เท่านั้น)
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}