
กำลังโหลด...

กำลังโหลด...

ทั้งวันนี้เราจะเขียนโค้ดที่ทำหน้าที่เดียว คือ "รับ Request แล้วส่ง Response กลับ" ถ้ายังอ่าน Request ไม่ออก เดี๋ยวจะเขียนโค้ดแบบท่องจำ
เปิด DevTools ตามที่พี่บอกใน Workshop ท้ายบทด้วยนะ อยากให้เห็นของจริง
เป้าหมายของ Mission นี้: อ่าน HTTP Request และ Response ออก รู้ว่าแต่ละส่วนคืออะไร
จบ Mission นี้คุณจะ
HTTP (HyperText Transfer Protocol) คือ ข้อตกลง ว่า Client กับ Server จะคุยกันด้วยรูปแบบไหน เหมือนแบบฟอร์มราชการ — ไม่ว่าใครกรอก ก็ต้องกรอกช่องเดียวกัน คนอ่านถึงจะเข้าใจ
กฎเหล็กของ HTTP มี 2 ข้อ
Stateless แปลว่าอะไร? แปลว่า Server จำไม่ได้ ว่าเมื่อกี้คุณเป็นใคร ทุก Request คือคนแปลกหน้า เสมอ — นี่คือเหตุผลที่ Backend Explorer 2 Chapter 4-5 ต้องมี Token ติดไปกับทุก Request เพื่อบอกว่า "นี่ฉันเองนะ"
sequenceDiagram
participant B as Browser
participant S as Express Server
participant D as Database
B->>S: GET /books
Note over S: หา route ที่ตรงกัน
S->>D: SELECT * FROM books
D-->>S: rows
Note over S: แปลงเป็น JSON
S-->>B: 200 OK + [{...}, {...}]
Note over B: เอาไป render บนหน้าจอ
Request คือ ข้อความล้วนๆ ที่ส่งข้ามเน็ตไป หน้าตาประมาณนี้
POST /books HTTP/1.1 <-- (1) Method + (2) Path
Host: localhost:3000 <-- (3) Headers
Content-Type: application/json
Authorization: Bearer eyJhbGciOi...
{ "title": "แฮร์รี่ พอตเตอร์", "year": 1997 } <-- (4) Body
| ส่วน | คืออะไร | เทียบกับร้านอาหาร |
|---|---|---|
| Method | จะทำ อะไร — GET / POST / PUT / DELETE | ดูเมนู / สั่งเพิ่ม / แก้ออเดอร์ / ยกเลิก |
| Path (URL) | จะทำกับ อะไร — /books, /books/3 |
ชื่อเมนูที่จะสั่ง |
| Headers | ข้อมูลกำกับ เช่น รูปแบบข้อมูล, บัตรประจำตัว | หมายเหตุ "ไม่ใส่ผัก" + บัตรสมาชิก |
| Body | เนื้อข้อมูลที่ส่งไป (มีเฉพาะ POST/PUT/PATCH) | รายละเอียดออเดอร์ |
GET ไม่มี Body — ถ้าต้องส่งข้อมูลไปกับ GET ให้ใช้ Query String ท้าย URL แทน เช่น
/books?year=1997(จะเรียนใน Chapter 4)
HTTP/1.1 201 Created <-- (1) Status Code + ข้อความ
Content-Type: application/json <-- (2) Headers
<-- (บรรทัดว่าง 1 บรรทัด)
{ "id": 4, "title": "แฮร์รี่ พอตเตอร์", "year": 1997 } <-- (3) Body
ASCII สรุปโครงสร้างทั้งคู่
REQUEST RESPONSE
+-----------------------+ +-----------------------+
| METHOD PATH HTTP/1.1| | HTTP/1.1 STATUS |
+-----------------------+ +-----------------------+
| Header: value | | Header: value |
| Header: value | | Header: value |
+-----------------------+ +-----------------------+
| | | |
| Body (JSON) | | Body (JSON) |
| *GET ไม่มี* | | |
+-----------------------+ +-----------------------+
ทำตามนี้เลย ใช้เวลา 3 นาที
https://jsonplaceholder.typicode.com/posts)content-type เขียนว่าอะไร?| ปัญหา | สาเหตุ / วิธีแก้ |
|---|---|
| ส่ง Body ไปกับ GET แล้วฝั่ง Server ไม่ได้ข้อมูล | GET ไม่มี Body ตามมาตรฐาน → ใช้ ?key=value แทน |
| ส่ง JSON แต่ Server อ่านไม่ออก | ลืมใส่ Header Content-Type: application/json |
| งงว่าทำไม Server จำ user ไม่ได้ | HTTP เป็น stateless โดยธรรมชาติ → ต้องแนบ Token ไปทุกครั้ง (Backend Explorer 2 Chapter 5) |
| คิดว่า URL คือ Method | คนละส่วนกัน — GET /books กับ DELETE /books คนละความหมายสิ้นเชิง |

Workshop — อ่าน Request จริงจาก DevTools (5 นาที)
https://jsonplaceholder.typicode.com/posts ในแท็บใหม่content-type ใน Response Headers เขียนว่าอะไร
ข้อ 1. HTTP Request ประกอบด้วยอะไรบ้าง
ข้อ 2. Method ใดที่ตามมาตรฐานแล้ว *ไม่มี* Body
ข้อ 3. HTTP เป็น stateless หมายความว่าอย่างไร
ข้อ 4. Header ตัวไหนที่บอก Server ว่า Body ที่ส่งไปเป็น JSON
ข้อ 5. ใครเป็นฝ่ายเริ่มการสนทนาใน HTTP เสมอ