บทช่วยสอน Schemaบทเรียนที่ 27: การ ping ไปยังบริการภายนอก
บทเรียนที่ 27: การ ping ไปยังบริการภายนอก
เราสามารถ ping ไปยังบริการภายนอกเกี่ยวกับทรัพยากรใหม่ที่เพิ่มเข้ามาในเว็บไซต์ของเรา พร้อมส่งต่อข้อมูลทั้งที่จัดเก็บไว้ในเว็บไซต์และ/หรือที่ให้มาผ่านพารามิเตอร์หรือ header
ในคิวรีนี้ เราดึง ID ของคอมเมนต์ที่เพิ่มเข้ามาในช่วง 24 ชั่วโมงที่ผ่านมา และสำหรับแต่ละรายการ เราส่ง ping ไปยังบริการภายนอก โดยส่ง ID ของคอมเมนต์เป็นพารามิเตอร์ใน URL และส่งต่อ header บางส่วนจาก HTTP request ปัจจุบัน:
{
timeNow: _time
time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)
comments(filter: { dateQuery: { after: $__date24HsAgo } } ) {
commentID: id
url: _urlAddParams(
url: "https://somewebsite.com/ping-new-comment",
params: {
commentID: $__commentID
}
)
headers: _httpRequestHeaders
@remove
requiredHeaders: _objectKeepProperties(
object: $__headers,
keys: ["user-agent", "origin"]
)
@remove
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__requiredHeaders
)
_sendHTTPRequest(input: {
url: $__url
method: GET
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}
}หากบริการภายนอกสามารถรับข้อมูลของทรัพยากรหลายรายการได้ เราสามารถรวบรวมข้อมูลทั้งหมด แล้วส่ง ping เพียงครั้งเดียว:
query ExportData {
timeNow: _time
time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)
comments(filter: { dateQuery: { after: $__date24HsAgo } } )
@export(as: "commentIDs")
{
id
}
hasComments: _notEmpty(value: $__comments)
@export(as: "hasComments")
@remove
}
query SendPing
@depends(on: "ExportData")
@include(if: $hasComments)
{
url: _urlAddParams(
url: "https://somewebsite.com/ping-new-comments",
params: {
commentIDs: $commentIDs
}
)
headers: _httpRequestHeaders
@remove
requiredHeaders: _objectKeepProperties(
object: $__headers,
keys: ["user-agent", "origin"]
)
@remove
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__requiredHeaders
)
_sendHTTPRequest(input: {
url: $__url
method: GET
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}