Notes & software courses · Free to learn
Aph's Blog
On this page

API, JSON & REST

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

ช่องทางให้โปรแกรมคุยกัน, รูปแบบข้อมูล JSON และแนวทางออกแบบ REST — พร้อมเรียก API จริงด้วย Python

API (Application Programming Interface) คือ "ช่องทาง" ให้โปรแกรมคุยและขอข้อมูลกัน เช่นแอปสภาพอากาศเรียก API ของกรมอุตุฯ เพื่อขอข้อมูล หัวข้อนี้สอนรูปแบบข้อมูล JSON แนวทาง REST และวิธีเรียก API จริง

JSON — รูปแบบข้อมูลมาตรฐาน

JSON (JavaScript Object Notation) คือรูปแบบข้อความที่นิยมใช้ส่งข้อมูลระหว่างโปรแกรม หน้าตาคล้าย dictionary ของ Python มาก จึงเข้าใจได้ทันที

json
{
  "name": "Aphisit",
  "age": 25,
  "skills": ["Python", "SQL"],
  "is_student": true,
  "address": {
    "city": "Bangkok",
    "zip": "10110"
  }
}
python
import json

# แปลง JSON (ข้อความ) -> dict ของ Python
text = '{"name": "Aphisit", "age": 25}'
data = json.loads(text)
print(data["name"])     # Aphisit  (ใช้เหมือน dict)

# แปลง dict -> JSON (ข้อความ)
person = {"name": "Mali", "age": 22}
print(json.dumps(person))  # {"name": "Mali", "age": 22}

เรียก API จริงด้วย Python

ใช้ไลบรารี requests (ติดตั้งด้วย pip install requests) ลองเรียก API ฟรีที่คืนข้อมูลตัวอย่าง

python
import requests

res = requests.get("https://jsonplaceholder.typicode.com/users/1")
print(res.status_code)      # 200  (สำเร็จ)

data = res.json()           # แปลง JSON response เป็น dict
print(data["name"])         # ชื่อผู้ใช้
print(data["email"])        # อีเมล

# ส่งข้อมูลด้วย POST
new_post = {"title": "สวัสดี", "body": "โพสต์แรก", "userId": 1}
res = requests.post("https://jsonplaceholder.typicode.com/posts",
                    json=new_post)
print(res.status_code)      # 201  (สร้างสำเร็จ)

REST — แนวทางออกแบบ API ที่นิยมที่สุด

REST เป็นชุดแนวทางการออกแบบ API หลักคือมองทุกอย่างเป็น "ทรัพยากร" (resource) เข้าถึงผ่าน URL และใช้ HTTP method สื่อความหมายของการกระทำ ทำให้ API คาดเดาได้และเป็นระเบียบ

Method + URLความหมาย
GET /usersดึงผู้ใช้ทั้งหมด
GET /users/1ดึงผู้ใช้ id 1
POST /usersสร้างผู้ใช้ใหม่
PUT /users/1แก้ไขผู้ใช้ id 1
DELETE /users/1ลบผู้ใช้ id 1
สังเกตความเป็นระเบียบ

URL บอก "ทรัพยากรอะไร" (users) ส่วน method บอก "ทำอะไรกับมัน" (ดู/สร้าง/แก้/ลบ) เมื่อรู้แค่ชื่อทรัพยากร ก็เดา URL ได้ทันที นี่คือเสน่ห์ของ REST รายละเอียดเชิงลึกอยู่ในหน้าพื้นฐานที่ต้องแม่นของส่วนเตรียมสัมภาษณ์

สรุปหัวข้อนี้

  • API คือช่องทางให้โปรแกรมคุย/ขอข้อมูลกัน
  • JSON คือรูปแบบข้อมูลมาตรฐาน หน้าตาคล้าย dict — แปลงด้วย json.loads/dumps
  • เรียก API ด้วย requests.get()/post() แล้วใช้ .json() แปลงผลเป็น dict
  • REST ใช้ URL ระบุทรัพยากร + HTTP method ระบุการกระทำ ทำให้ API คาดเดาได้
แบบฝึกหัด

1) ใช้ requests เรียก https://jsonplaceholder.typicode.com/todos/1 แล้วพิมพ์ค่า title 2) ดึงรายชื่อผู้ใช้ทั้งหมดจาก /users แล้ววนพิมพ์เฉพาะชื่อ 3) แปลง dict เป็น JSON ด้วย json.dumps 4) ออกแบบ REST endpoint สำหรับระบบบล็อก (ดู/สร้าง/แก้/ลบ โพสต์)