BUAT DUNIAMU
Bermain Ganda
Permintaan HTTP dari server Multiplay
15mnt
anda dapat melakukan permintaan http dari server zepeto world multiplay menggunakan modul zepeto multiplay httpservice integrasikan layanan web eksternal ke dalam operasi logika bisnis anda, penyimpanan data, analisis statistik, pelacakan kesalahan, dan lainnya harap pastikan bahwa hanya protokol https yang digunakan, sementara http hanya didukung di lingkungan pengembangan permintaan hanya diizinkan pada port 80 dan 443 ukuran maksimum untuk tubuh permintaan dan respons dibatasi hingga 16kb jaga jumlah permintaan per menit di bawah 500 untuk menghindari potensi pembatasan pada layanan dunia jika terjadi permintaan berlebihan permintaan akan gagal jika layanan web eksternal tidak merespons dalam waktu 5 detik pastikan bahwa content type dalam header respons sesuai dengan nilai yang ditentukan dalam httpcontenttype enum; jika tidak, permintaan akan gagal mengingat kemungkinan permintaan web gagal karena berbagai alasan, disarankan untuk melakukan pengkodean secara defensif zepeto multiplay httpservice 📘 silakan merujuk ke panduan berikut \[ api zepeto multiplay httpservice https //developer zepeto me/docs/multiplay server/interfaces/zepeto multiplay httpservice httpservice ] metode metode deskripsi httpservice getasync(url string, headers? httpheader) promise melakukan permintaan http get secara asinkron \[parameter] \ url alamat web untuk mengirim permintaan \ headers header permintaan http (opsional) \[nilai kembali] \ promise\<httpresponse> mengembalikan objek httpresponse yang berisi informasi tentang respons sebagai promise httpservice postasync(url string, body httpbodytype, headers? httpheader) promise melakukan permintaan http post secara asinkron \[parameter] \ url alamat web untuk mengirim permintaan \ body konten tubuh permintaan \ headers header permintaan http (opsional) \[nilai kembali] \ promise\<httpresponse> mengembalikan objek httpresponse yang berisi informasi tentang respons sebagai promise httpservice postasync(url string, body httpbodytype, httpcontenttype httpcontenttype, headers? httpheader) promise melakukan permintaan http post secara asinkron \[parameter] \ url alamat web untuk mengirim permintaan \ body konten tubuh permintaan \ httpcontenttype menentukan header content type permintaan \ headers header permintaan http (opsional) \[nilai kembali] \ promise\<httpresponse> mengembalikan objek httpresponse yang berisi informasi tentang respons sebagai promise saat menggunakan tanda tangan ini, jika anda menambahkan 'content type' ke header, itu akan ditimpa oleh apa yang ditentukan dalam httpcontenttype deklarasi lain deklarasi deskripsi httpcontenttype enumerasi konstanta yang menentukan content type untuk header http \ applicationjson 'application/json' \ applicationxml 'application/xml' \ applicationurlencoded 'application/x www form urlencoded' \ textplain 'text/plain' \ textxml 'text/xml' httpbodytype tipe untuk konten tubuh permintaan http, yang bisa berupa string atau objek dengan kunci string dan nilai apa pun httpheader tipe untuk mendefinisikan header permintaan http, di mana nilai properti bisa berupa string atau angka dalam objek httpresponse antarmuka yang mencakup informasi tentang hasil permintaan http dan data respons \ statuscodehttp sebuah angka yang mewakili kode status dari respons biasanya, 200 menunjukkan permintaan yang berhasil \ statustexthttp sebuah string yang mewakili pesan status dari respons biasanya, "ok" menunjukkan permintaan yang berhasil \ response sebuah string yang berisi data tubuh respons http 📘 status http https //developer mozilla org/en us/docs/web/http/status https //developer mozilla org/en us/docs/web/http/status contoh kode permintaan get dasar mari kita buat contoh permintaan get sederhana menggunakan httpservice getasync ketika klien baru terhubung ke ruang multiplay, kita akan mengirim permintaan http ke layanan web eksternal dan mencatat hasilnya restcountries com https //restcountries com/ adalah api terbuka yang menyediakan informasi tentang berbagai negara kami akan menggunakan layanan ini untuk mengetahui ibu kota jepang siapkan multiplay, lalu buka world multiplay/index ts dan tulis skrip server sebagai berikut 📘 silakan merujuk ke panduan berikut \[ bermain ganda docid\ cvcg580umg hwv8qbgm0p ] import { sandbox, sandboxoptions, sandboxplayer } from "zepeto multiplay"; import { httpservice } from "zepeto multiplay httpservice"; export default class extends sandbox { oncreate(options sandboxoptions) { } onjoin(client sandboxplayer) { this findcapitalcity() } onleave(client sandboxplayer, consented? boolean) { } findcapitalcity() { // buat permintaan ke api restcountries httpservice getasync("https //restcountries com/v3 1/name/japan?fields=capital") // penangan untuk respons http then((httpresponse) => { // parse data respons json dari api (yang terletak di dalam respons http) let countries = json parse(httpresponse response); console log("kota ibu kota jepang adalah "); console log(`${countries\[0] capital}`); }); } } deskripsi kode ketika seorang klien terhubung ke ruang multiplay, fungsi onjoin dipicu, dan itu memanggil findcapitalcity jika panggilan getasync ke api restcountries berhasil, anda dapat mengakses objek httpresponse di dalam then callback parse httpresponse response untuk mengonversi respons api, yang dalam format json, menjadi sebuah objek dengan merujuk pada struktur respons api, anda mengakses properti yang diinginkan dan kemudian mencetak nilainya ketika anda menjalankan server multiplay di editor unity dan memainkan adegan, yang berikut akan ditampilkan di console ibu kota jepang adalah tokyo praktik pengkodean defensif sementara itu, seperti yang disebutkan dalam langkah langkah pencegahan pengantar, permintaan web dapat gagal karena berbagai alasan, termasuk perubahan alamat web atau format respons api kegagalan untuk menangani permintaan ini dengan benar dapat memiliki berbagai efek buruk pada permainan dunia, jadi disarankan untuk mengkode secara defensif, terutama saat berurusan dengan permintaan http berikut adalah contoh penerapan beberapa teknik pengkodean defensif pada kode di atas findcapitalcity() { // buat permintaan ke api restcountries httpservice getasync( "https //restcountries com/v3 1/name/japan?fields=capital", { 'accept' httpcontenttype applicationjson }) // penangan untuk respons http then((httpresponse) => { // periksa apakah panggilan api mengembalikan 200(ok) atau tidak if (httpresponse statuscode != 200) { // jika tidak 200(ok), jangan lanjutkan dan angkat kesalahan kustom throw (`kesalahan api ${httpresponse statuscode} ${httpresponse statustext}`); } // kembalikan data respons json dari api return httpresponse response; }) // penangan untuk data respons json dari api then((response) => { // parse data respons json let countries = json parse(response); // periksa apakah data respons api valid if (!array isarray(countries) || !countries length) { // jika bukan array, atau kosong // jangan lanjutkan dan angkat kesalahan kustom throw (`kesalahan api data respons tidak valid`); } let country = countries\[0]; // periksa apakah field 'capital' valid if (!country capital) { // jika field 'capital' tidak ada, atau kosong // jangan lanjutkan dan angkat kesalahan kustom throw (`kesalahan api field 'capital' tidak valid`); } console log("ibu kota jepang adalah ") console log(`${country capital}`); }) // penangan untuk kesalahan yang terjadi dalam panggilan getasync dan klausa 'then' catch((reason) => { console log("kesalahan permintaan api"); console log(reason); }); } teknik pengkodean defensif yang diterapkan di sini meliputi yang berikut menggunakan accept header accept header digunakan untuk menentukan content type yang diharapkan untuk body respons tergantung pada server, content type respons dapat disesuaikan berdasarkan accept header memeriksa httpresponse statuscode properti httpresponse statuscode digunakan untuk memverifikasi keberhasilan permintaan memvalidasi struktur data json anda mengonfirmasi apakah struktur data dari objek yang diparsing dengan json parse sesuai dengan struktur yang diharapkan memverifikasi keberadaan properti anda memastikan bahwa properti yang ingin anda gunakan benar benar ada dalam objek memanfaatkan catch metode promise metode catch dari promise digunakan untuk menangani kesalahan yang mungkin terjadi selama permintaan api dan pemrosesan respons teknik teknik ini melindungi kode agar beroperasi dengan andal di tengah kesalahan yang tidak terduga, meningkatkan ketahanannya mengintegrasikan dengan klien melalui pesan ruangan permintaan http hanya mungkin dilakukan dari server multiplay namun, dengan menggunakan pesan ruangan multiplay, anda dapat memicu server untuk mengirim permintaan http ke layanan web eksternal dari klien dan memanfaatkan respons di dalam klien contoh berikut menunjukkan integrasi klien server dalam demonstrasi ini, ketika tombol pada ui klien ditekan, ibu kota negara yang sesuai dengan tombol ditampilkan 📘 silakan merujuk ke panduan berikut \[ proses koneksi ruangan docid\ dxdbn6wvi82ag wdc1thr ] kode klien import { zepetoscriptbehaviour } from 'zepeto script' import { room } from 'zepeto multiplay' import { zepetoworldmultiplay } from 'zepeto world'; import { button, text } from 'unityengine ui' export default class samplescript extends zepetoscriptbehaviour { public multiplay zepetoworldmultiplay; public room room; public countrybuttons button\[]; public capitaltext text; start() { interface response { capitals string\[] } for (const countrybutton of this countrybuttons) { countrybutton onclick addlistener(() => { if (this room !== null) { // kirim nama negara sebagai pesan tipe 'client to server' ke server this room send("client to server", countrybutton getcomponentinchildren\<text>() text); } }); }; this multiplay roomcreated += (room room) => { this room = room; // tangani pesan yang diterima dengan tipe 'server to client' this room addmessagehandler("server to client", (message response) => { // untuk negara dengan beberapa ibu kota, // gabungkan elemen string dengan ', ' dan tampilkan di scene this capitaltext text = message capitals join(", "); }); }; } } deskripsi kode kami mendefinisikan pendengar yang mengiterasi melalui tombol yang menampilkan nama nama negara ketika diklik, pendengar ini mengirim pesan ruangan ke server multiplay pendengar ini mengirim nama negara yang ditampilkan pada tombol sebagai pesan tipe 'client to server' untuk menangani respons, kami juga mendefinisikan pendengar untuk memproses pesan ruangan yang diterima sebagai tipe 'server to client' pendengar ini menampilkan nama ibu kota yang diterima dari server di layar jika ada beberapa ibu kota, mereka ditampilkan di layar, dipisahkan oleh koma kode server import { sandbox, sandboxoptions, sandboxplayer } from "zepeto multiplay"; import { httpservice } from "zepeto multiplay httpservice"; export default class extends sandbox { oncreate(options sandboxoptions) { // tangani pesan yang diterima dengan tipe 'client to server' this onmessage("client to server", (client, message) => { console log(`klien ${client userid} mengirim permintaan pesan ${message}`); this findcapitalcity(message, client); }); } onjoin(client sandboxplayer) { } onleave(client sandboxplayer, consented? boolean) { } findcapitalcity(countryname string, client sandboxplayer) { // permintaan api dengan countryname sebagai parameter jalur // countryname dikirim oleh klien sebagai pesan ruang httpservice getasync(`https //restcountries com/v3 1/name/${countryname}?fields=capital`) then((httpresponse) => { if (httpresponse statuscode != 200) { throw (`kesalahan api ${httpresponse statuscode} ${httpresponse statustext}`); } return httpresponse response; }) then((response) => { let countries = json parse(response); if (!array isarray(countries) || !countries length) { throw (`kesalahan api data respons tidak valid`); } let country = countries\[0]; if (!country capital) { throw (`kesalahan api field 'capital' tidak valid`); } // kirim pesan tipe 'server to client' ke klien // pesan adalah objek yang berisi nama nama ibu kota client send("server to client", { "capitals" country capital }); }) catch((reason) => { console log("kesalahan permintaan api"); console log(reason); }); } } deskripsi kode kami mendefinisikan pendengar yang, setelah menerima pesan ruang multiplay tipe 'client to server', memanggil findcapitalcity kami membangun alamat untuk pesan ruang multiplay menggunakan nama negara dan melakukan panggilan getasync jika panggilan getasync berhasil, respons ditangani seperti pada contoh sebelumnya nama ibu kota yang diperoleh dari respons api restcountries dikirim ke klien sebagai pesan ruang tipe 'server to client' permintaan post terakhir, mari kita buat contoh permintaan post menggunakan httpservice postasync postman echo https //postman echo com/ adalah layanan yang menyediakan respons terstruktur yang menunjukkan konten apa yang diterima dari permintaan web, menjadikannya efektif untuk memverifikasi apakah klien telah mengonfigurasi permintaan dengan benar melalui contoh ini, kita akan mengatur permintaan post dengan parameter kueri, badan permintaan, dan header serta memastikan bahwa permintaan dikonfigurasi dengan benar siapkan multiplay, lalu buka world multiplay/index ts dan tulis skrip server sebagai berikut import { sandbox, sandboxoptions, sandboxplayer } from "zepeto multiplay"; import { httpcontenttype, httpservice } from "zepeto multiplay httpservice"; export default class extends sandbox { oncreate(options sandboxoptions) { } onjoin(client sandboxplayer) { this echopost() } onleave(client sandboxplayer, consented? boolean) { } echopost() { httpservice postasync( // api endpoint dengan parameter kueri "https //postman echo com/post?argkey=argvalue", // json request body { "datakey" "datavalue" }, // jenis konten permintaan httpcontenttype applicationjson, // header http { "header key" "header value" }) then((httpresponse) => { if (httpresponse statuscode != 200) { throw (`kesalahan api ${httpresponse statuscode} ${httpresponse statustext}`); } return httpresponse response; }) then((response) => { let parsed = json parse(response); console log(`parameter kueri argkey ${parsed args argkey}`); console log(`isi permintaan datakey ${parsed data datakey}`); console log(`header permintaan header key ${parsed headers\["header key"]}`) }) catch((reason) => { console log("kesalahan permintaan api"); console log(reason); }); } } deskripsi kode ketika klien terhubung ke ruang multiplay, echopost fungsi dipanggil dari onjoin pemicu saat membuat postasync permintaan pada parameter pertama, kami membangun string url dengan parameter kueri pada parameter kedua, kami mengatur konten tubuh permintaan pada parameter keempat, kami mengonfigurasi header permintaan untuk menentukan bahwa tubuh permintaan dalam format json, kami mengatur 'application/json' content type di parameter ketiga jika postasync panggilan berhasil, kami dapat mengakses httpresponse objek di then callback kami mengurai httpresponse response untuk mengonversi respons api dalam format json menjadi objek merujuk pada struktur respons api, kami menggunakan output console untuk memverifikasi apakah parameter kueri permintaan http kami, tubuh permintaan, dan header permintaan telah dikonfigurasi dengan benar ketika anda menjalankan server multiplay di editor unity dan memainkan adegan, yang berikut akan ditampilkan di konsol parameter kueri argkey\ argvalue badan permintaan datakey\ datavalue header permintaan header key\ header value