คุณสามารถใช้ HttpService เพื่อส่งคำขอ HTTP ทั่วไปไปยังบริการเว็บของบุคคลที่สาม สำหรับการใช้งานต่างๆ เช่น การวิเคราะห์ การจัดเก็บข้อมูล หรือการบันทึกข้อผิดพลาด HttpService ยังสนับสนุนบางปลายทางของ Open Cloud
เปิดใช้งานคำขอ HTTP
วิธี HttpService:GetAsync(), HttpService:PostAsync(), และ HttpService:RequestAsync() จะไม่เปิดใช้งานโดยเริ่มต้น เพื่อส่งคำขอ คุณต้อง อนุญาตคำขอ HTTP ภายใต้ การตั้งค่าประสบการณ์ สำหรับเกมของคุณ
ใช้งานในปลั๊กอิน
คุณสามารถใช้ HttpService ในปลั๊กอิน Studio เพื่อตรวจสอบการอัปเดต ดาวน์โหลดเนื้อหา หรือโลจิกทางธุรกิจอื่นๆ เมื่อปลั๊กอินพยายามใช้บริการเป็นครั้งแรก ผู้ใช้อาจถูกถามเพื่อให้การอนุญาตปลั๊กอินในการสื่อสารกับที่อยู่เว็บเฉพาะ ผู้ใช้สามารถยอมรับ ปฏิเสธ และเพิกถอนการอนุญาตเหล่านี้ได้ทุกเมื่อผ่านหน้าต่าง การจัดการปลั๊กอิน
ปลั๊กอินยังสามารถสื่อสารกับซอฟต์แวร์อื่นที่ทำงานบนคอมพิวเตอร์เดียวกันผ่านโฮสต์ localhost และ 127.0.0.1 โดยการเรียกใช้โปรแกรมที่เข้ากันได้กับปลั๊กอินเหล่านั้น คุณสามารถขยายฟังก์ชันการทำงานของปลั๊กอินให้เกินขีดความสามารถปกติของ Studio เช่น การโต้ตอบกับระบบไฟล์ของคอมพิวเตอร์ของคุณ ควรระวังว่าซอฟต์แวร์ดังกล่าวต้องถูกแจกจ่ายแยกต่างหากจากปลั๊กอินเอง และอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัย
ใช้งานกับ Open Cloud
HttpService สามารถเรียกปลายทางของ Open Cloud ได้บางส่วนในปัจจุบัน คุณสามารถเรียกใช้ปลายทางเหล่านี้ในลักษณะเดียวกับการเรียกใช้ปลายทางอื่นๆ ผ่าน HttpService ความแตกต่างเพียงอย่างเดียวคือคุณต้องรวมคีย์ API ของ Open Cloud ในคำขอ:
- ทำการส่งคำขอ
โค้ดตัวอย่างต่อไปนี้แสดงวิธีการอัปเดตการเป็นสมาชิกกลุ่มของผู้ใช้จากภายในเกม:
local HttpService = game:GetService("HttpService")
local groupId = "your_group_id"
local membershipId = "your_membership_id"
local roleId = "your_role_id"
local function request()
local response = HttpService:RequestAsync({
Url = `https://apis.roblox.com/cloud/v2/groups/{groupId}/memberships/{membershipId}`,
Method = "PATCH",
Headers = {
["Content-Type"] = "application/json", -- เมื่อส่ง JSON ให้ตั้งค่านี้!
["x-api-key"] = HttpService:GetSecret("APIKey"), -- ตั้งค่าใน Creator Hub
},
Body = HttpService:JSONEncode({ role = `groups/{groupId}/roles/{roleId}` }),
})
if response.Success then
print("คำตอบสำเร็จ:", response.StatusCode, response.StatusMessage)
else
print("คำตอบเกิดข้อผิดพลาด:", response.StatusCode, response.StatusMessage)
end
print("เนื้อหาคำตอบ:\n", response.Body)
print("ส่วนหัวของคำตอบ:\n", HttpService:JSONEncode(response.Headers))
end
-- ห่อหุ้มฟังก์ชันใน pcall() เพื่อความปลอดภัย
local success, errorMessage = pcall(request)
if not success then
print("คำขอ HTTP ไม่สามารถส่งได้:", errorMessage)
end
ปลายทาง Open Cloud ที่รองรับ
ปลายทางต่อไปนี้ได้รับการสนับสนุน เนื่องจากข้อจำกัดปัจจุบันบน HttpService สตริง .. จึงไม่อนุญาตในพารามิเตอร์เส้นทาง URL ไปยังโดเมนของ Roblox ซึ่งหมายความว่าตัวอย่างเช่น คลังข้อมูลและรายการที่มีสตริงนี้จึงไม่สามารถเข้าถึงได้จาก HttpService
แอสเซท
การแบนและบล็อก
การตั้งค่า
ร้านค่านักพัฒนา
ผลิตภัณฑ์ของนักพัฒนา
เกมพาส
คลังข้อมูลและหน่วยความจำ
คลังกข้อมูล:
ร้านหน่วยความจำ:
คลังกข้อมูลที่เรียงลำดับ:
กลุ่ม
คลังสินค้า
การทำงานของ Lua
การแจ้งเตือน
สถานที่
จักรวาล
ผู้ใช้
ข้อจำกัด
- อนุญาตเฉพาะส่วนหัว x-api-key และ content-type เท่านั้น
- สตริง ".." ไม่ได้รับอนุญาตในพารามิเตอร์เส้นทาง URL
- รองรับเฉพาะโปรโตคอล HTTPS เท่านั้น
- คุณไม่สามารถใช้พอร์ต 1194 หรือพอร์ตใดๆ ที่ต่ำกว่า 1024 ยกเว้น 80 และ 443 หากคุณพยายามใช้พอร์ตที่ถูกบล็อก คุณจะได้รับข้อผิดพลาด 403 Forbidden หรือ ERR_ACCESS_DENIED
ข้อจำกัดอัตรา
สำหรับเซิร์ฟเวอร์เกม Roblox แต่ละแห่ง จะมีการจำกัดการร้องขอ Open Cloud ที่ 2500 รายการต่อนาที การเกินขีดจำกัดนี้อาจทำให้วิธีการส่งคำขอหยุดชะงักเป็นเวลาประมาณ 30 วินาที pcall() ของคุณอาจล้มเหลวพร้อมกับข้อความ Number of Open Cloud requests exceeded limit
- คำขอ Open Cloud ไม่ใช้ โควต้า 500 คำขอ HTTP ต่อ минутซึ่งบังคับใช้กับคำขออื่นๆ ทั้งหมด
- ทุกปลายทางมีขีดจำกัดของตนเองต่อเจ้าของคีย์ API (อาจเป็นผู้ใช้หรือกลุ่ม) ซึ่งบังคับใช้ไม่ว่าเรียกจากไหน (HttpService, เว็บ ฯลฯ)
สำหรับข้อมูลรายละเอียดเกี่ยวกับการจำกัดอัตรา Open Cloud การจำกัดตามการรับรองความถูกต้อง และแนวทางปฏิบัติที่ดีที่สุด ให้ดูที่ อัตรา จำกัด
แนวทางปฏิบัติที่ดีที่สุด
เพื่อเพิ่มประสิทธิภาพการใช้งาน HttpService ของคุณและหลีกเลี่ยงการเกินขีดจำกัด ให้ใช้แนวทางปฏิบัติที่ดีที่สุดต่อไปนี้:
จัดการข้อผิดพลาดอย่างราบรื่น คำขอเว็บอาจล้มเหลวได้ด้วยเหตุผลหลายประการ ใช้ pcall() และต้องมีแผนเมื่อคำขอล้มเหลว นอกจากนี้ ให้ตรวจสอบและทำความสะอาดข้อมูลที่รับมาจาก APIs ภายนอกทั้งหมดอย่างเข้มงวด เพื่อให้ได้ข้อมูลที่ถูกต้องเมื่อคุณสามารถ
ใช้ การถดถอยแบบทวีคูณ เพื่อให้ต่ำกว่าขีดจำกัด
หากคำขอส่งคืนข้อผิดพลาดที่ฟื้นตัวได้ แทนที่จะลองส่งใหม่ทันที ให้รอเป็นเวลา 2 วินาที จากนั้น 4, 8 วินาที เป็นต้น ระหว่างความพยายาม สิ่งนี้ช่วยลดความแออัดและเพิ่มโอกาสในการส่งคำขอที่ประสบความสำเร็จโดยการให้เวลาปลายทางในการ "เย็นลง"
รวบรวมและส่งข้อมูลในปริมาณมาก
เมื่อเป็นไปได้ แนะนำให้ให้เซิร์ฟเวอร์ของคุณรวบรวมข้อมูลทั้งหมดที่จำเป็นเพื่อต้องการส่งคำขอ HTTP เพียงคำขอเดียว แทนที่จะเป็นคำขอเล็กๆ หลายรายการ ตัวอย่างเช่น หากคุณกำลังส่งคำขอ HTTP สำหรับผู้เล่นทุกคนในเซิร์ฟเวอร์ของคุณ ให้ตรวจสอบว่า API มีปลายทางแบบกลุ่ม/แบตช์หรือไม่ และถ้ามีให้รวบรวมข้อมูลจากผู้เล่นทั้งหมดและส่งทั้งหมดในคำขอเดียว
ในบางกรณี คุณอาจต้องใช้ HttpService:RequestAsync() เพื่อรวมข้อมูลในเนื้อหาของคำขอ
ใช้ปลายทาง HTTP/2 HTTP/2 มอบประโยชน์ด้านประสิทธิภาพอย่างมากผ่านฟีเจอร์ต่างๆ เช่น การบีบอัดส่วนหัวและการมัลติเพล็กซิ่งคำขอ/การตอบสนองผ่านการเชื่อมต่อเดียว HttpService จะใช้ HTTP/2 โดยอัตโนมัติเมื่อมีให้ ใช้ข้อสังเกตว่าสpecification ของ HTTP/2 กำหนดให้ชื่อส่วนหัวทั้งหมดต้องส่งในตัวพิมพ์เล็ก
การมองเห็น
แดชบอร์ด การมองเห็น ให้ข้อมูลเชิงลึกและการวิเคราะห์เพื่อการติดตามและแก้ปัญหาการใช้งาน HttpService ของคุณ แดชบอร์ดมีกราฟหลักสองกราฟคือ จำนวนคำขอ ซึ่งติดตามปริมาณคำขอจาก HttpService ที่มาจากเกมของคุณ และ เวลาตอบกลับ ซึ่งวัดความหน่วงในการตอบสนองของปลายทาง
มิติที่มีอยู่สำหรับการกรองและการแบ่งประเภทถูกกำหนดไว้ดังนี้:
ประเภทคำขอ
- GET
- POST
- PUT
- PATCH
- DELETE
- อื่นๆ (สำหรับประเภทคำขอที่ไม่ระบุ)
สถานะ
- สำเร็จ (รหัสสถานะ HTTP 1xx และ 2xx)
- เปลี่ยนเส้นทาง (รหัสสถานะ HTTP 3xx)
- 400 (คำขอไม่ถูกต้อง)
- 401 (ไม่ได้รับอนุญาต)
- 403 (ถูกปฏิเสธ)
- 404 (ไม่พบ)
- 429 (คำขอมากเกินไป)
- 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์)
- 503 (บริการไม่พร้อมให้บริการ)
- ExternalError (รหัสข้อผิดพลาดอื่นใดที่ไม่ระบุที่ส่งคืนจากบริการภายนอก)
- InternalError (ปัญหาที่ส่งคืนจาก HttpService ภายใน Roblox)
กราฟ เวลาตอบกลับ ไม่สัมพันธ์กับข้อมูลสถานะ หากคุณเลือก "สถานะ" เป็นการกรองหรือแบ่งประเภท กราฟนี้จะไม่แสดงข้อมูล
ข้อพิจารณาเพิ่มเติม
- คำขอควรจัดเตรียมการรับรองความถูกต้องในรูปแบบที่ปลอดภัย เช่น คีย์ลับที่แชร์กันไว้ล่วงหน้า เพื่อไม่ให้ผู้ไม่หวังดีสามารถแอบอ้างเป็นเซิร์ฟเวอร์ Roblox ของคุณ
- ควรตระหนักถึงความจุและนโยบายการจำกัดอัตราโดยทั่วไปของเว็บเซิร์ฟเวอร์ที่ส่งคำขอไปยัง