คุณสามารถใช้ HttpService เพื่อส่งคำร้อง HTTP ทั่วไปไปยังบริการเว็บของบุคคลที่สามสำหรับกรณีการใช้งานเช่นการวิเคราะห์ การจัดเก็บข้อมูล หรือการบันทึกข้อผิดพลาด HttpService ยังรองรับบางจุดสิ้นสุดของ Open Cloud
เปิดใช้งานคำร้อง HTTP
วิธีการ HttpService:GetAsync(), HttpService:PostAsync(), และ HttpService:RequestAsync() จะไม่เปิดใช้งานโดยค่าเริ่มต้น เพื่อส่งคำร้อง คุณต้อง อนุญาตคำร้อง HTTP ภายใต้ ไฟล์ ⟩ การตั้งค่าประสบการณ์ ⟩ ความปลอดภัย ใน Studio
ใช้ในปลั๊กอิน
คุณสามารถใช้ 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
สินทรัพย์
การแบนและบล็อก
การตั้งค่า
ร้านค้าผู้สร้าง
ผลิตภัณฑ์นักพัฒนา
เกมพาส
สตอเรจข้อมูลและหน่วยความจำ
สตอเรจข้อมูล:
หน่วยความจำ:
สตอเรจข้อมูลที่เรียงลำดับ:
กลุ่ม
สินค้าคงคลัง
การดำเนินการ Luau
การแจ้งเตือน
สถานที่
จักรวาล
ผู้ใช้
ข้อจำกัด
- อนุญาตเฉพาะส่วนหัว x-api-key และ content-type เท่านั้น
- สตริง ".." จะไม่อนุญาตในพารามิเตอร์เส้นทาง URL
- รองรับเฉพาะโปรโตคอล HTTPS เท่านั้น
- คุณไม่สามารถใช้พอร์ต 1194 หรือพอร์ตใด ๆ ที่ต่ำกว่า 1024 ยกเว้น 80 และ 443 หากคุณพยายามใช้พอร์ตที่ถูกบล็อก คุณจะได้รับข้อผิดพลาด 403 Forbidden หรือ ERR_ACCESS_DENIED
ข้อจำกัดอัตรา
สำหรับเซิร์ฟเวอร์เกม Roblox แต่ละตัว จะมีข้อจำกัด 2500 คำร้อง Open Cloud ต่อหนึ่งนาที การเกินขีดจำกัดนี้อาจทำให้วิธีการส่งคำร้องหยุดชะงักประมาณ 30 วินาที pcall() ของคุณอาจล้มเหลวด้วยข้อความว่า จำนวนคำร้อง Open Cloud เกินขีดจำกัด
- คำร้อง Open Cloud ไม่ ใช้ขีดจำกัดรวมเดียวกัน 500 คำร้อง HTTP ต่อหนึ่งนาทีที่บังคับใช้กับคำร้องอื่น ๆ ทั้งหมด
- แต่ละจุดสิ้นสุดมีขีดจำกัดของตัวเองต่อเจ้าของคีย์ API (สามารถเป็นผู้ใช้หรือกลุ่ม) ที่บังคับใช้ไม่ว่าการเรียกจะมาจากที่ใด (HttpService, เว็บ ฯลฯ)
สำหรับข้อมูลรายละเอียดเกี่ยวกับข้อจำกัดอัตรา Open Cloud การจำกัดอัตราแบบอิงการรับรองความถูกต้อง และแนวทางปฏิบัติที่ดีที่สุด ดูที่ ข้อจำกัดอัตรา.
แนวทางปฏิบัติที่ดีที่สุด
เพื่อเพิ่มประสิทธิภาพการใช้งาน HttpService ของคุณและหลีกเลี่ยงการเกินขีดจำกัด ให้ใช้แนวทางปฏิบัติที่ดีที่สุดต่อไปนี้:
จัดการข้อผิดพลาดอย่างราบรื่น คำร้องเว็บอาจล้มเหลวได้ด้วยเหตุผลหลายประการ ใช้ pcall() และมีแผนสำหรับเมื่อคำร้องล้มเหลว นอกจากนี้ ให้ตรวจสอบและทำความสะอาดข้อมูลทั้งหมดที่ได้รับจาก API ภายนอกอย่างเข้มงวด เพื่อให้แน่ใจว่าข้อมูลถูกต้องเมื่อคุณสามารถทำได้
ใช้ การถอยกลับแบบเอ็กซ์โพเนนเชียล เพื่อให้ต่ำกว่าขีดจำกัด
หากคำร้องส่งคืนข้อผิดพลาดที่สามารถกู้คืนได้ แทนที่จะลองใหม่ทันที ให้รอเป็นเวลาสองวินาที จากนั้นสี่ แปด ฯลฯ ระหว่างการพยายาม นี่ช่วยจำกัดความแออัดและเพิ่มโอกาสในการร้องขอที่ประสบความสำเร็จโดยการให้เวลาจุดสิ้นสุด "เย็นลง"
รวบรวมและส่งข้อมูลในกลุ่ม
เมื่อเป็นไปได้ แนะนำให้ให้เซิร์ฟเวอร์ของคุณรวบรวมข้อมูลทั้งหมดที่จำเป็นเพื่อส่งคำร้อง HTTP หนึ่งคำร้อง แทนที่จะเป็นคำร้องเล็ก ๆ หลายคำร้อง ตัวอย่างเช่น หากคุณกำลังส่งคำร้อง HTTP สำหรับผู้เล่นทุกคนในเซิร์ฟเวอร์ของคุณ ให้ตรวจสอบว่า API มีจุดสิ้นสุดแบบกลุ่ม/แบตช์หรือไม่ และถ้าใช่ ให้รวบรวมข้อมูลจากผู้เล่นทั้งหมดและส่งทั้งหมดในคำร้องเดียว
ในบางกรณี คุณอาจต้องใช้ HttpService:RequestAsync() เพื่อรวมข้อมูลในเนื้อหาของคำร้อง
ใช้จุดสิ้นสุด HTTP/2 HTTP/2 มอบประโยชน์ด้านประสิทธิภาพที่สำคัญผ่านฟีเจอร์ต่าง ๆ เช่น การบีบอัดส่วนหัวและการทำงานหลายคำร้อง/ตอบกลับผ่านการเชื่อมต่อเดียว HttpService จะใช้ HTTP/2 โดยอัตโนมัติเมื่อมีให้บริการ โปรดทราบว่าข้อกำหนด 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 ของคุณ
- โปรดทราบถึงความจุทั่วไปและนโยบายการจำกัดอัตราของเซิร์ฟเวอร์เว็บที่คำร้องถูกส่งไปยัง