พิพิธภัณฑ์ที่จับต้องได้ · เปิดฟรี ไม่ต้องสมัคร
ห้องทดลองทั้ง 4 ห้อง
แต่ละห้องคือแบบจำลองเพื่อการเรียนรู้ที่ทำงานจริงในเบราว์เซอร์ของคุณ กดได้ เปลี่ยนได้ พังได้ และเริ่มใหม่ได้เสมอ ในหนังสือ ห้องเหล่านี้ฝังอยู่ในบทที่อธิบายเรื่องนั้นพอดี
ROOM 01 · จากเล่ม 01 FRONTEND
สนามทดลองหน้าเว็บ
ประกอบหน้าเว็บด้วย HTML, CSS และ JavaScript แล้วดูผลทันที
LAB 01 — Frontend Construction Chamber
สนามทดลองหน้าเว็บ
ผลลัพธ์ · สิ่งที่ผู้ใช้เห็น
- HTML5 ชิ้นบนหน้า
- CSSกำลังตกแต่ง
- JavaScriptปิดอยู่ · ไม่มีใครฟัง
เกิดอะไรขึ้น?
ขนมปังอบใหม่ทุกเช้า
แป้งหมักเอง อบด้วยเตาถ่าน ส่งถึงบ้าน
HTML บอกมีอะไรบ้าง
index.html · โค้ดที่ตรงกับหน้าจอตอนนี้
<body><header>ร้านบ้านแป้ง · เมนู · ติดต่อ</header><h1>ขนมปังอบใหม่ทุกเช้า</h1><p>แป้งหมักเอง อบด้วยเตาถ่าน ส่งถึงบ้าน</p><img src="bread.png" alt="ขนมปังก้อนกลม"><button id="order">สั่งขนมปัง</button></body>
ROOM 02 · จากเล่ม 02 BACKEND
ร้านกาแฟของเซิร์ฟเวอร์
สั่งกาแฟแล้วติดตาม Request กับ Response ทั้งตอนสำเร็จและล้มเหลว
LAB 02 — Request Processing Engine
ร้านกาแฟของเซิร์ฟเวอร์
สถานการณ์จำลอง · เลือกก่อนกดสั่ง
เซิร์ฟเวอร์ทำงานตามปกติ
Browser · ฝั่งลูกค้า
Server · coffee.example
IDLE · รอคำขอ
- รับคำขอ Receiveรอ
- ตรวจข้อมูล Validateรอ
- เช็กสต็อก Check stockรอ
- บันทึกและชงกาแฟ Save & brewรอ
- ส่งคำตอบกลับ Respondรอ
สต็อกในร้าน · เบราว์เซอร์มองไม่เห็นส่วนนี้
- ลาเต้6 แก้ว
- อเมริกาโน่8 แก้ว
- โกโก้4 แก้ว
POST /api/orders HTTP/1.1 Host: coffee.example Content-Type: application/json Accept: application/json { "drink": "latte", "qty": 1, "customerName": "มะลิ" }
// ยังไม่มี Response // กด 'สั่งเลย' เพื่อส่ง Request
เกิดอะไรขึ้น?
กด สั่งเลย แล้วดูซองสีน้ำเงินเดินทาง ซองนั้นคือ Request ที่เบราว์เซอร์ห่อข้อมูลคำสั่งซื้อส่งไปหาเซิร์ฟเวอร์ จากนั้นลองเปลี่ยนสถานการณ์จำลองด้านบน เพื่อดูว่าความล้มเหลวแต่ละแบบต่างกันอย่างไร หรือลองใส่จำนวนเป็น 0 หรือลบชื่อออก
ผลลัพธ์ 4 แบบ · ลองแล้ว 0/4
- 2xx
สำเร็จ
ได้สิ่งที่ขอ เช่น 201 Created
- 4xx
คำขอมีปัญหา
ฝั่งผู้ส่งต้องแก้คำขอ เช่น 400, 409
- 5xx
เซิร์ฟเวอร์มีปัญหา
ไม่ใช่ความผิดลูกค้า เช่น 500
- ไม่มีรหัส
ไปไม่ถึง / ไม่มีคำตอบ
ปัญหาที่ทางเดิน ไม่มี Response
ROOM 03 · จากเล่ม 03 DATABASE
ลิ้นชักข้อมูล
เพิ่ม ค้นหา แก้ไข ลบ และเชื่อมตารางลูกค้ากับคำสั่งซื้อ
LAB 03 — Data Memory Vault
ลิ้นชักข้อมูล
SELECT *
FROM customers;เกิดอะไรขึ้น?
ลิ้นชัก · TABLE
customers ลูกค้า
| id (Primary Key) | name | city |
|---|---|---|
| 1 | เชียงใหม่ | |
| 2 | กรุงเทพฯ | |
| 3 | ขอนแก่น | |
| 4 | ภูเก็ต |
ลองดูกดชื่อลูกค้าในตารางบน เพื่อดูว่าคำสั่งซื้อแถวไหนในตารางล่างชี้กลับมาหาเขา
ลิ้นชัก · TABLE
orders คำสั่งซื้อ
| id (Primary Key) | customer_id (Foreign Key ชี้ไปที่ customers.id) | item | total ฿ |
|---|---|---|---|
| 101 | ลาเต้เย็น | 65 | |
| 102 | อเมริกาโน่ร้อน | 55 | |
| 103 | โกโก้ปั่น | 70 | |
| 104 | ชาไทยเย็น | 50 | |
| 105 | คาปูชิโน่ | 60 | |
| 106 | เอสเพรสโซ่ | 45 |
ใครมีสิทธิ์เขียนลงฐานข้อมูล?
เบราว์เซอร์ ปะทะ เซิร์ฟเวอร์
ลองแก้ราคาคำสั่งซื้อ #101 (ลาเต้เย็น 65 บาท) ด้วยสามเส้นทาง แล้วดูว่าคำขอถูกหยุดที่ไหน
ROOM 04 · จากเล่ม 04 WEBSITE ONLINE
เผยแพร่สู่โลก
พาเว็บไซต์จากเครื่องเดียวออกไปหาผู้ใช้หลายประเทศ
LAB 04 — Global Network Observatory
เผยแพร่สู่โลก
ใครเปิดได้เปิดได้คนเดียว: ผู้พัฒนา
ขั้นที่ 0 · เว็บไซต์ยังอยู่บนเครื่องผู้พัฒนา
เว็บไซต์ทำงานอยู่ที่ localhost:3000 คำว่า localhost แปลว่า 'เครื่องนี้เอง' เบราว์เซอร์บนเครื่องเราจึงเปิดได้ แต่ถ้าเพื่อนพิมพ์คำเดียวกัน เบราว์เซอร์ของเพื่อนจะไปหาเครื่องของเพื่อนเอง ไม่ใช่เครื่องเรา
คำสั่งเปิดเว็บบนเครื่องตัวเอง
$ npm run dev > พร้อมใช้งานที่ http://localhost:3000