RESTful API Design, HTTPie CLI / Desktop & Scoop Installation (1145101)
Week 2 Detailed Agenda & Outline
Architectural Style for Distributed Hypermedia Systems
REST ไม่ใช่โปรโตคอลหรือมาตรฐานบังคับ แต่เป็น สถาปัตยกรรมระดับแนวทางปฏิบัติ (Architectural Style) ที่ถูกนำเสนอโดย Roy Fielding ในปี 2000 สำหรับสร้าง Web Services ที่ขยายระบบง่าย (Scalable) และสื่อสารกันผ่านมาตรฐานโปรโตคอล HTTP
REST vs RPC / gRPC vs GraphQL
Shifting from Verbs to Nouns in Web Development
สร้าง URL แยกตามการทำงานแต่ละฟังก์ชัน:
ใช้ URL ระบุทรัพยากร และใช้ HTTP Verb ระบุการกระทำ:
Best Practices for Clean & Standard URLs
แทนกลุ่มชุดทรัพยากร เช่น `/users`, `/products`, `/orders` แทนคำเอกพจน์
ใช้ตัวพิมพ์เล็กทั้งหมด เชื่อมคำด้วย `-` (kebab-case) เช่น `/order-items` ห้ามใช้ `camelCase` หรือ `_`
ห้ามใส่คำว่า `/create-user` หรือ `/delete-item` ให้ใช้ HTTP Method แทนการระบุกริยา
เข้าถึงข้อมูลเฉพาะชิ้นโดยการต่อท้ายด้วย ID เช่น `/users/102` หรือ `/orders/88`
HTTP Methods & Resource Endpoint Matrix
| HTTP Verb | CRUD Operation | Example Endpoint | Safe? | Idempotent? |
|---|---|---|---|---|
| GET | Read (ดึงข้อมูล) | /api/v1/articles | Yes | Yes |
| POST | Create (สร้างข้อมูลใหม่) | /api/v1/articles | No | No |
| PUT | Update (ทดแทนทั้งหมด) | /api/v1/articles/10 | No | Yes |
| PATCH | Update (แก้ไขบางส่วน) | /api/v1/articles/10 | No | No |
| DELETE | Delete (ลบข้อมูล) | /api/v1/articles/10 | No | Yes |
Modeling Parent-Child Relationships in URLs
/authors/1/books/5/chapters/12 ให้ปรับเป็น /chapters/12 โดยตรงเพื่อความเรียบง่าย
Managing Collection Datasets without Changing Resource URLs
ส่งเงื่อนไขกรองเฉพาะรายการที่เข้าเกณฑ์:
กำหนดฟิลด์และทิศทางในการเรียงลำดับ:
แบ่งการส่งข้อมูลออกเป็นก้อนเพื่อลดภาระระบบ:
Meaningful Response Statuses in API Design
`200` สำหรับดึง/แก้ไขสำเร็จ และ `201` สำหรับคำสั่งสร้างทรัพยากรใหม่สำเร็จ (POST)
ประมวลผลสำเร็จแต่ไม่มี Response Payload ส่งกลับ (นิยมใช้กับคำสั่ง DELETE)
`400` สำหรับไวยากรณ์ผิดพลาด และ `422` สำหรับกรณีข้อมูลฟอร์มไม่ผ่านการ Validation
`401` เมื่อผู้ใช้ยังไม่ได้ Login และ `403` เมื่อ Login แล้วแต่ไม่มีสิทธิ์เข้าถึงทรัพยากร
JSON Data Formatting & Naming Conventions
Predictable Error Responses for Client Integration
• ช่วยให้ทีมพัฒนาฝั่ง Frontend หรือ Mobile App เขียนสคริปต์ดักจับและแสดงข้อผิดพลาดบน UI ได้อย่างสม่ำเสมอ
• สามารถระบุรายละเอียดฟิลด์ที่ไม่ผ่านเงื่อนไข Validation ช่วยเพิ่มประสบการณ์ผู้ใช้ที่ดีขึ้น
Managing Backward Compatibility in Growing Applications
ระบุเวอร์ชันลงในโครงสร้าง URL โดยตรง อ่านง่าย และทดสอบได้สะดวกรวดเร็ว:
ระบุเวอร์ชันผ่าน Request Header เช่น `Accept` หรือ Custom Header:
Token-Based Authentication & Authorization Headers
Command-Line Software Installer for Developers
Scoop เป็น Package Manager บน Windows ที่ช่วยให้เราติดตั้ง จัดการ และอัปเดตเครื่องมือพัฒนาซอฟต์แวร์ผ่าน PowerShell ได้ง่ายๆ โดยไม่ต้องกด GUI Wizard หน้าต่างป๊อปอัปให้ยุ่งยาก
Installing Modern API Testing Tools in One Command
Human-Friendly Command-Line HTTP Client
• ไวยากรณ์สั้นกระชับ เป็นธรรมชาติ สื่อความหมายชัดเจน
• จัดรูปแบบสีเน้นข้อความ (Syntax Highlighting) และจัดย่อหน้า JSON อัตโนมัติ
• กำหนดค่า `Content-Type: application/json` ให้อัตโนมัติเมื่อส่งป้อนข้อมูล
HTTPie CLI Usage Examples: Parameters, Headers & JSON
Visual & Intuitive API Testing Environment
สร้าง Request สลับแท็บ Param, Header, Body (JSON/Form) ได้สะดวกรวดเร็วผ่านหน้าจอ GUI
จัดกลุ่มรายการ API Endpoints แยกตามโปรเจกต์ เพิ่มความสะดวกในการทำงานร่วมกันเป็นทีม
ตั้งค่าตัวแปรสภาพแวดล้อม เช่น `{{base_url}}` หรือ `{{token}}` สำหรับสลับทดสอบระหว่าง Local/Prod
API Testing Tools Comparison Matrix
| คุณสมบัติ | cURL | HTTPie (CLI & Desktop) | Postman |
|---|---|---|---|
| Interface Support | CLI เท่านั้น | CLI & Desktop App | Desktop App & Cloud |
| ความง่ายของไวยากรณ์ CLI | ซับซ้อน ต้องจดจำตัวแปรดิบ | อ่านง่าย เป็นธรรมชาติ | ไม่มี CLI หลัก (ต้องใช้ Newman) |
| การจัดรูปแบบ JSON/Color | ข้อความเปล่า ต้องต่อท่อ `jq` | สีสันสวยงาม & จัดย่อหน้าในตัว | สวยงามผ่าน GUI |
| การติดตั้งบน Windows | มีในตัว (PowerShell) | ติดตั้งง่ายผ่าน Scoop | ดาวน์โหลดไฟล์ `.exe` ขนาดใหญ่ |
Hands-on Lab Exercise: Testing Live Mock Services
ใช้ **HTTPie CLI** บน Terminal หรือ **HTTPie Desktop** ยิง Request ไปยัง Public API (https://jsonplaceholder.typicode.com):
Small Group Workshop: E-Commerce / Store API Design
ออกแบบโครงสร้าง Endpoints สำหรับระบบร้านค้าออนไลน์ (Store System) ที่ประกอบด้วยทรัพยากร **Products** และ **Orders**
• กำหนด HTTP Method, URL Path และ Status Code ให้ถูกต้องตามมาตรฐาน REST
• เขียนโครงสร้าง JSON Request / Response Body จำลอง
Week 2 Key Takeaways & Summary
สถาปัตยกรรมแบบ Stateless, Client-Server และ Uniform Interface
ใช้คำนามพหูพจน์ระบุทรัพยากร จับคู่ CRUD กับ HTTP Verbs
ใช้ Scoop บน Windows ติดตั้งเครื่องมือสาย Dev ได้สะดวกผ่าน Terminal
ใช้ HTTPie CLI & Desktop ทดสอบการรับส่ง JSON Payload อย่างมีประสิทธิภาพ
Weekly Assignment & Self-Study Guide (5 Hours/Week)
Monolithic vs Microservices Architecture & Architectural Trade-offs