HTTP request จากเซิร์ฟเวอร์ Multiplay
คุณสามารถทำการร้องขอ HTTP จากเซิร์ฟเวอร์ ZEPETO World Multiplay โดยใช้โมดูล ZEPETO.Multiplay.HttpService รวมบริการเว็บภายนอกเข้ากับการดำเนินงานด้านตรรกะธุรกิจ การจัดเก็บข้อมูล การวิเคราะห์ทางสถิติ การติดตามข้อผิดพลาด และอื่นๆ
- โปรดตรวจสอบให้แน่ใจว่าใช้โปรโตคอล HTTPS เท่านั้น ขณะที่ HTTP รองรับเฉพาะในสภาพแวดล้อมการพัฒนา
- อนุญาตให้ทำการร้องขอเฉพาะที่พอร์ต 80 และ 443 เท่านั้น
- ขนาดสูงสุดสำหรับเนื้อหาของการร้องขอและการตอบสนองถูกจำกัดที่ 16KB
- ให้รักษาจำนวนการร้องขอต่อหนึ่งนาทีไม่เกิน 500 เพื่อหลีกเลี่ยงข้อจำกัดที่อาจเกิดขึ้นกับบริการโลกหากมีการร้องขอมากเกินไป
- การร้องขอจะล้มเหลวหากบริการเว็บภายนอกไม่ตอบสนองภายใน 5 วินาที
- ตรวจสอบให้แน่ใจว่าประเภทเนื้อหาในส่วนหัวการตอบสนองตรงกับค่าที่กำหนดใน HttpContentType enum; มิฉะนั้น การร้องขอจะล้มเหลว
- เนื่องจากมีความเป็นไปได้ที่การร้องขอเว็บจะล้มเหลวด้วยเหตุผลต่างๆ จึงแนะนำให้เขียนโค้ดอย่างระมัดระวัง
📘 โปรดดูคู่มือต่อไปนี้ [ZEPETO.Multiplay.HttpService API]
วิธีการ | คำอธิบาย |
---|---|
HttpService.getAsync(url: string, headers?: HttpHeader): Promise | ดำเนินการร้องขอ HTTP GET แบบอะซิงโครนัส .[พารามิเตอร์] - url : ที่อยู่เว็บที่ส่งคำขอไปยัง - headers : หัวข้อคำขอ HTTP (ไม่บังคับ) [ค่าที่ส่งกลับ] - Promise<HttpResponse> : คืนค่าอ็อบเจ็กต์ HttpResponse ที่มีข้อมูลเกี่ยวกับการตอบกลับในรูปแบบ Promise |
HttpService.postAsync(url: string, body: HttpBodyType, headers?: HttpHeader): Promise | ดำเนินการร้องขอ HTTP POST แบบอะซิงโครนัส .[พารามิเตอร์] - url : ที่อยู่เว็บที่ส่งคำขอไปยัง - body : เนื้อหาของคำขอ - headers : หัวข้อคำขอ HTTP (ไม่บังคับ) [ค่าที่ส่งกลับ] - Promise<HttpResponse> : คืนค่าอ็อบเจ็กต์ HttpResponse ที่มีข้อมูลเกี่ยวกับการตอบกลับในรูปแบบ Promise |
HttpService.postAsync(url: string, body: HttpBodyType, httpContentType: HttpContentType, headers?: HttpHeader): Promise | ดำเนินการร้องขอ HTTP POST แบบอะซิงโครนัส .[พารามิเตอร์] - url : ที่อยู่เว็บที่ส่งคำขอไปยัง - body : เนื้อหาของคำขอ - httpContentType : ระบุหัวข้อ Content-Type ของคำขอ - headers : หัวข้อคำขอ HTTP (ไม่บังคับ) [ค่าที่ส่งกลับ] - Promise<HttpResponse> : คืนค่าอ็อบเจ็กต์ HttpResponse ที่มีข้อมูลเกี่ยวกับการตอบกลับในรูปแบบ Promise เมื่อใช้ลายเซ็นนี้ หากคุณเพิ่ม 'Content-Type' ใน headers มันจะถูกเขียนทับโดยสิ่งที่ระบุใน httpContentType |
การประกาศ | คำอธิบาย |
---|---|
HttpContentType | การระบุประเภทเนื้อหาสำหรับ HTTP headers. - ApplicationJson : 'application/json' - ApplicationXml : 'application/xml' - ApplicationUrlEncoded : 'application/x-www-form-urlencoded' - TextPlain : 'text/plain' - TextXml : 'text/xml' |
HttpBodyType | ประเภทสำหรับเนื้อหาของ HTTP request body ซึ่งสามารถเป็นได้ทั้งสตริงหรือวัตถุที่มีคีย์เป็นสตริงและค่าที่เป็นอะไรก็ได้. |
HttpHeader | ประเภทสำหรับการกำหนด HTTP request headers โดยที่ค่าของคุณสมบัติสามารถเป็นได้ทั้งสตริงหรือหมายเลขในวัตถุ. |
HttpResponse | อินเตอร์เฟซที่รวมข้อมูลเกี่ยวกับผลลัพธ์ของ HTTP request และข้อมูลการตอบกลับ. - statusCodeHTTP : หมายเลขที่แสดงถึงรหัสสถานะของการตอบกลับ โดยทั่วไป 200 แสดงถึงการร้องขอที่สำเร็จ. - statusTextHTTP : สตริงที่แสดงถึงข้อความสถานะของการตอบกลับ โดยทั่วไป "OK" แสดงถึงการร้องขอที่สำเร็จ. - response : สตริงที่มีข้อมูลเนื้อหาของการตอบกลับ HTTP. |
📘 สถานะ HTTP https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
เรามาสร้างตัวอย่างคำขอ GET ที่ง่ายโดยใช้ HttpService.getAsync. เมื่อมีลูกค้าใหม่เชื่อมต่อกับห้อง Multiplay เราจะส่งคำขอ HTTP ไปยังบริการเว็บภายนอกและบันทึกผลลัพธ์.
restcountries.com เป็น API แบบเปิดที่ให้ข้อมูลเกี่ยวกับประเทศต่างๆ เราจะใช้บริการนี้เพื่อตรวจสอบเมืองหลวงของญี่ปุ่น
ตั้งค่า Multiplay จากนั้นเปิด World.multiplay/index.ts และเขียนสคริปต์เซิร์ฟเวอร์ดังนี้
📘 โปรดดูคู่มือต่อไปนี้ [มัลติเพลย์]
คำอธิบายโค้ด:
- เมื่อไคลเอนต์เชื่อมต่อกับห้อง Multiplay ฟังก์ชัน onJoin จะถูกเรียกใช้งาน และมันจะเรียก findCapitalCity.
- ถ้า getAsync เรียกไปยัง API restcountries สำเร็จ คุณสามารถเข้าถึง httpResponse อ็อบเจ็กต์ใน then คอลแบ็ก.
- แปลง httpResponse.response เพื่อแปลงการตอบสนองจาก API ซึ่งอยู่ในรูปแบบ JSON ให้เป็นอ็อบเจ็กต์.
- โดยการอ้างอิงถึงโครงสร้างของการตอบสนองจาก API คุณสามารถเข้าถึงคุณสมบัติที่ต้องการและพิมพ์ค่าของพวกเขาได้.
เมื่อคุณเรียกใช้เซิร์ฟเวอร์ Multiplay ใน Unity Editor และเล่นฉาก ข้อความต่อไปนี้จะถูกแสดงใน Console.
- ในขณะเดียวกัน ตามที่ได้กล่าวไว้ในข้อควรระวังเบื้องต้น การร้องขอเว็บอาจล้มเหลวได้จากหลายสาเหตุ รวมถึงการเปลี่ยนแปลงในที่อยู่เว็บหรือรูปแบบการตอบสนองของ API.
- การจัดการคำขอเหล่านี้อย่างไม่เหมาะสมอาจมีผลกระทบที่ไม่พึงประสงค์ต่อการเล่นโลก ดังนั้นจึงแนะนำให้เขียนโค้ดอย่างปลอดภัย โดยเฉพาะเมื่อจัดการกับคำขอ HTTP.
- ต่อไปนี้คือตัวอย่างการใช้เทคนิคการเขียนโค้ดที่ปลอดภัยหลายอย่างกับโค้ดด้านบน.
เทคนิคการเขียนโค้ดเชิงป้องกันที่ใช้ที่นี่รวมถึงสิ่งต่อไปนี้:
- การใช้ Accept Header: Accept header ใช้เพื่อระบุ Content-Type ที่คาดหวังสำหรับเนื้อหาของการตอบกลับ ขึ้นอยู่กับเซิร์ฟเวอร์ Content-Type ของการตอบกลับสามารถปรับได้ตาม Accept header.
- การตรวจสอบ HttpResponse.statusCode: HttpResponse.statusCode คุณสมบัติใช้เพื่อยืนยันความสำเร็จของคำขอ.
- การตรวจสอบโครงสร้างข้อมูล JSON: คุณยืนยันว่าโครงสร้างข้อมูลของวัตถุที่แยกวิเคราะห์ด้วย JSON.parse ตรงกับโครงสร้างที่คาดหวัง.
- การตรวจสอบการมีอยู่ของคุณสมบัติ: คุณมั่นใจว่าคุณสมบัติที่คุณตั้งใจจะใช้มีอยู่จริงในวัตถุ.
- การใช้ catch ของ Promise: catch วิธีการของ Promise ใช้เพื่อจัดการข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการร้องขอ API และการประมวลผลการตอบกลับ.
เทคนิคเหล่านี้ช่วยปกป้องโค้ดให้ทำงานได้อย่างเชื่อถือได้เมื่อเผชิญกับข้อผิดพลาดที่ไม่คาดคิด เพิ่มความแข็งแกร่งให้กับมัน.
คำขอ HTTP สามารถทำได้จากเซิร์ฟเวอร์ Multiplay เท่านั้น.
อย่างไรก็ตาม โดยการใช้ข้อความในห้อง Multiplay คุณสามารถกระตุ้นให้เซิร์ฟเวอร์ส่งคำขอ HTTP ไปยังบริการเว็บภายนอกจากลูกค้าและใช้การตอบสนองภายในลูกค้าได้.
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการรวมเข้ากับลูกค้าและเซิร์ฟเวอร์ ในการสาธิตนี้ เมื่อปุ่มบน UI ของลูกค้าถูกกด เมืองหลวงของประเทศที่ตรงกับปุ่มจะแสดงขึ้น.
📘 กรุณาอ้างอิงจากคู่มือต่อไปนี้.[ข้อความในห้องเล่นหลายคน]
รหัสลูกค้า
คำอธิบายโค้ด:
- เรากำหนดผู้ฟังที่วนรอบปุ่มที่แสดงชื่อประเทศ เมื่อคลิก ผู้ฟังนี้จะส่งข้อความ Room ไปยังเซิร์ฟเวอร์ Multiplay.
- ผู้ฟังนี้ส่งชื่อประเทศที่แสดงบนปุ่มเป็นข้อความประเภท 'client-to-server'.
- เพื่อจัดการกับการตอบสนอง เรากำหนดผู้ฟังสำหรับการประมวลผลข้อความ Room ที่ได้รับเป็นประเภท 'server-to-client'.
- ผู้ฟังนี้แสดงชื่อเมืองหลวงที่ได้รับจากเซิร์ฟเวอร์บนหน้าจอ หากมีเมืองหลวงหลายแห่ง จะถูกแสดงบนหน้าจอ แยกด้วยเครื่องหมายจุลภาค.
รหัสเซิร์ฟเวอร์
คำอธิบายโค้ด:
- เรากำหนดผู้ฟังที่เมื่อได้รับข้อความ Multiplay Room ประเภท 'client-to-server' จะเรียก findCapitalCity.
- เราสร้างที่อยู่สำหรับข้อความ Multiplay Room โดยใช้ชื่อประเทศและทำการ getAsync เรียก.
- หากการ getAsync เรียกสำเร็จ การตอบสนองจะถูกจัดการตามตัวอย่างก่อนหน้า.
- ชื่อเมืองหลวงที่ได้รับจากการตอบสนองของ API restcountries จะถูกส่งไปยังลูกค้าในฐานะข้อความ Room ประเภท 'server-to-client'.
สุดท้ายนี้ มาสร้างตัวอย่างคำขอ POST โดยใช้ HttpService.postAsync.
postman-echo เป็นบริการที่ให้การตอบสนองที่มีโครงสร้างแสดงเนื้อหาที่ได้รับจากคำขอเว็บ ทำให้มีประสิทธิภาพในการตรวจสอบว่าลูกค้าได้กำหนดค่าคำขออย่างถูกต้องหรือไม่
ผ่านตัวอย่างนี้ เราจะตั้งค่าคำขอ POST พร้อมพารามิเตอร์การค้นหา เนื้อหาคำขอ และหัวข้อ และตรวจสอบให้แน่ใจว่าคำขอได้รับการกำหนดค่าอย่างถูกต้อง
ตั้งค่า Multiplay จากนั้นเปิด World.multiplay/index.ts และเขียนสคริปต์เซิร์ฟเวอร์ดังนี้
คำอธิบายโค้ด:
- เมื่อไคลเอนต์เชื่อมต่อกับห้อง Multiplay, echoPost ฟังก์ชันจะถูกเรียกจาก onJoin ทริกเกอร์.
- เมื่อทำการ postAsync คำขอ:
- ในพารามิเตอร์แรก, เราสร้างสตริง URL พร้อมพารามิเตอร์การค้นหา.
- ในพารามิเตอร์ที่สอง, เราตั้งค่าคอนเทนต์ของร่างคำขอ.
- ในพารามิเตอร์ที่สี่, เรากำหนดค่าหัวข้อคำขอ.
- เพื่อระบุว่าร่างคำขออยู่ในรูปแบบ JSON, เราตั้งค่า 'application/json' Content-Type ในพารามิเตอร์ที่สาม.
- หากการเรียก postAsync สำเร็จ, เราสามารถเข้าถึง httpResponse อ็อบเจ็กต์ใน then คอลแบ็ก.
- เราวิเคราะห์ httpResponse.response เพื่อแปลงการตอบสนอง API ในรูปแบบ JSON เป็นอ็อบเจ็กต์.
- อ้างอิงจากโครงสร้างของการตอบสนอง API, เราใช้ Console output เพื่อตรวจสอบว่าพารามิเตอร์การค้นหา, ร่างคำขอ, และหัวข้อคำขอของ HTTP ของเราถูกกำหนดค่าอย่างถูกต้องหรือไม่.
เมื่อคุณเรียกใช้เซิร์ฟเวอร์ Multiplay ใน Unity Editor และเล่นฉาก ข้อความต่อไปนี้จะปรากฏใน Console.