พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน
เมธอด HTTP รหัสสถานะ ส่วนหัว และรูปแบบคำขอ/การตอบกลับ JSON
พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คำขอ HTTP คืออะไร
เอเจนต์ทุกตัวที่เชื่อมต่อกับบริการภายนอกใช้ HTTP ซึ่งเป็นภาษาของเว็บ คำขอ HTTP มีองค์ประกอบสำคัญสามส่วน ได้แก่ เมธอด URL และ ส่วนหัวกับเนื้อหาที่เป็นทางเลือก
ลองนึกว่าเมธอดเป็นคำกริยาที่บอกเซิร์ฟเวอร์ว่าคุณต้องการทำอะไร และ URL เป็นที่อยู่ของทรัพยากร
import requests
# A simple GET request to a public API
response = requests.get('https://api.example.com/users')
print(response.status_code) # 200
print(response.text) # raw JSON stringGET — การดึงข้อมูล
GET ใช้ดึงข้อมูลจากเซิร์ฟเวอร์ และไม่ควรแก้ไขสิ่งใด เอเจนต์ใช้ GET เพื่ออ่านโพรไฟล์ผู้ใช้ ดึงรายการภารกิจ หรือเรียกข้อมูลการกำหนดค่า
คุณสามารถส่งพารามิเตอร์ใน URL เป็น สตริงคำค้น โดยใช้ข้อโต้แย้ง params
import requests
# Fetch users filtered by role
params = {'role': 'admin', 'page': 1, 'limit': 10}
response = requests.get(
'https://api.example.com/users',
params=params
)
# URL becomes: /users?role=admin&page=1&limit=10
data = response.json()
print(data['users'])POST — การสร้างทรัพยากร
POST ส่งข้อมูลไปยังเซิร์ฟเวอร์เพื่อสร้างทรัพยากรใหม่ เอเจนต์ใช้ POST เพื่อส่งภารกิจ ส่งข้อความ หรือเรียกใช้การดำเนินการ ข้อมูลจะอยู่ใน เนื้อหาคำขอ ในรูปแบบ JSON
โปรดกำหนดส่วนหัว Content-Type: application/json เสมอ เพราะ API ส่วนใหญ่จำเป็นต้องใช้ส่วนหัวนี้
import requests
import json
payload = {
'title': 'Research competitors',
'assignee': 'agent-001',
'priority': 'high'
}
response = requests.post(
'https://api.example.com/tasks',
json=payload # sets Content-Type automatically
)
print(response.status_code) # 201 Created
new_task = response.json()
print('Created task ID:', new_task['id'])PUT และ PATCH — การอัปเดตข้อมูล
PUT แทนที่ทรัพยากรทั้งหมดด้วยข้อมูลใหม่ ส่วน PATCH จะอัปเดตเฉพาะฟิลด์ที่ระบุ เอเจนต์ใช้ PUT เมื่อมีออบเจ็กต์ที่อัปเดตครบถ้วน และใช้ PATCH สำหรับการเปลี่ยนแปลงบางส่วน เช่น การอัปเดตสถานะของภารกิจ
import requests
task_id = '42'
# PATCH: only update the status field
response = requests.patch(
f'https://api.example.com/tasks/{task_id}',
json={'status': 'completed'}
)
print(response.status_code) # 200
# PUT: replace the whole task object
full_task = {
'title': 'Research competitors',
'assignee': 'agent-001',
'priority': 'low',
'status': 'completed'
}
response = requests.put(
f'https://api.example.com/tasks/{task_id}',
json=full_task
)
print(response.status_code) # 200DELETE — การลบทรัพยากร
DELETE ลบทรัพยากรออกจากเซิร์ฟเวอร์ เอเจนต์ใช้ DELETE เพื่อล้างข้อมูลชั่วคราว ลบภารกิจที่ประมวลผลแล้ว หรือยกเลิกงานที่กำหนดเวลาไว้ คำขอ DELETE ส่วนใหญ่ไม่มีเนื้อหา
โดยทั่วไปการดำเนินการ delete ที่สำเร็จจะส่งคืน 204 No Content ซึ่งหมายความว่าไม่มีเนื้อหาในคำตอบ
import requests
task_id = '42'
response = requests.delete(
f'https://api.example.com/tasks/{task_id}'
)
if response.status_code == 204:
print('Task deleted successfully')
elif response.status_code == 404:
print('Task not found — already deleted?')
else:
print('Unexpected status:', response.status_code)รหัสสถานะ: สำเร็จช่วง 2xx
รหัสสถานะจะบอกเอเจนต์ว่าคำขอสำเร็จหรือล้มเหลว ช่วง 2xx หมายถึงสำเร็จ:
200 OK— GET/PUT/PATCH ส่งข้อมูลกลับมา201 Created— POST สร้างทรัพยากรใหม่204 No Content— DELETE สำเร็จ และไม่มีเนื้อหาส่งกลับมา
โปรดตรวจสอบรหัสสถานะก่อนประมวลผลเนื้อหาคำตอบเสมอ
import requests
response = requests.post(
'https://api.example.com/tasks',
json={'title': 'New task'}
)
if response.status_code == 201:
task = response.json()
print('Created:', task['id'])
elif response.status_code == 200:
print('Updated existing resource')
else:
print('Unexpected code:', response.status_code)รหัสสถานะ: ข้อผิดพลาดฝั่งไคลเอนต์ช่วง 4xx
ข้อผิดพลาด 4xx หมายความว่าเอเจนต์ส่งคำขอที่ไม่ถูกต้อง ข้อผิดพลาดที่พบบ่อยมีดังนี้:
400 Bad Request— JSON ไม่ถูกต้องหรือไม่มีฟิลด์ที่จำเป็น401 Unauthorized— ไม่มีคีย์ API หรือคีย์ไม่ถูกต้อง404 Not Found— ไม่มีทรัพยากรดังกล่าว429 Too Many Requests— เกินขีดจำกัดอัตราการส่งคำขอ
กรณีเหล่านี้กำหนดให้เอเจนต์แก้ไขคำขอ ไม่ใช่ลองใหม่โดยไม่ตรวจสอบ
import requests
response = requests.get(
'https://api.example.com/tasks/9999',
headers={'Authorization': 'Bearer YOUR_KEY'}
)
if response.status_code == 401:
print('AUTH ERROR: Check your API key')
elif response.status_code == 404:
print('Task not found')
elif response.status_code == 429:
retry_after = response.headers.get('Retry-After', 60)
print(f'Rate limited. Wait {retry_after}s')
elif response.status_code == 400:
print('Bad request:', response.json().get('error'))รหัสสถานะ: ข้อผิดพลาดฝั่งเซิร์ฟเวอร์ช่วง 5xx
ข้อผิดพลาด 5xx หมายความว่าเกิดสิ่งผิดพลาดฝั่งเซิร์ฟเวอร์ เอเจนต์ของคุณไม่ได้ทำอะไรผิด ข้อผิดพลาดที่พบบ่อยมีดังนี้:
500 Internal Server Error— ข้อบกพร่องหรือการหยุดทำงานของเซิร์ฟเวอร์502 Bad Gateway— บริการต้นทางล้มเหลว503 Service Unavailable— เซิร์ฟเวอร์มีภาระมากเกินไปหรือหยุดให้บริการ
กรณีเหล่านี้สามารถลองใหม่ได้อย่างปลอดภัยหลังจากรอสักครู่
import requests
import time
def get_with_retry(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code < 500:
return response # success or client error
wait = 2 ** attempt
print(f'Server error {response.status_code}, retrying in {wait}s...')
time.sleep(wait)
return response # return last response after retriesส่วนหัวของคำขอ
ส่วนหัวจะส่งข้อมูลเมทาดาทาไปพร้อมกับทุกคำขอ ส่วนหัวที่สำคัญที่สุดสำหรับเอเจนต์มีดังนี้:
Content-Type: application/json— บอกเซิร์ฟเวอร์ว่าเนื้อหาคำขอเป็น JSONAuthorization: Bearer TOKEN— ยืนยันตัวตนของคำขอAccept: application/json— บอกเซิร์ฟเวอร์ว่าคุณคาดว่าจะได้รับ JSON กลับมาUser-Agent— ระบุไคลเอนต์ของคุณ (API บางแห่งจำเป็นต้องใช้)
import requests
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-proj-abc123xyz',
'Accept': 'application/json',
'User-Agent': 'MyAgent/1.0'
}
response = requests.post(
'https://api.example.com/analyze',
headers=headers,
json={'text': 'Analyze this document'}
)
print(response.json())เนื้อหาคำขอและคำตอบในรูปแบบ JSON
API สมัยใหม่ส่วนใหญ่แลกเปลี่ยนข้อมูลในรูปแบบ JSON ขณะส่งข้อมูล ให้ใช้ json=payload ในคำขอ (ระบบจะจัดรูปแบบข้อมูลและกำหนดส่วนหัวให้อัตโนมัติ) ขณะรับข้อมูล ให้เรียกใช้ response.json() เพื่อแยกวิเคราะห์เนื้อหาเป็นดิกชันนารีของ Python
โปรดตรวจสอบว่าคีย์ที่คาดไว้มีอยู่จริงก่อนเข้าถึงคีย์เหล่านั้นเสมอ
import requests
# Send JSON body
response = requests.post(
'https://api.example.com/summarize',
json={
'content': 'Long article text here...',
'max_length': 150,
'format': 'bullet_points'
}
)
# Parse JSON response
result = response.json()
# Always check keys exist
summary = result.get('summary', 'No summary returned')
tokens_used = result.get('usage', {}).get('total_tokens', 0)
print('Summary:', summary)
print('Tokens used:', tokens_used)รวมทุกอย่างเข้าด้วยกัน
เอเจนต์ที่เขียนมาอย่างดีจะห่อหุ้มการเรียก API ด้วยฟังก์ชันช่วยเหลือที่จัดการการเลือกเมธอด การกำหนดส่วนหัวที่ถูกต้อง การตรวจสอบรหัสสถานะ และการแยกวิเคราะห์ JSON อย่างเป็นระเบียบ วิธีนี้ทำให้การโต้ตอบกับ API ทุกครั้งมีรูปแบบสอดคล้องกันและแก้ไขข้อผิดพลาดได้ง่าย
ใช้ ออบเจ็กต์ Session เพื่อใช้การเชื่อมต่อซ้ำและแบ่งปันส่วนหัวระหว่างคำขอหลายรายการ
import requests
class APIClient:
def __init__(self, base_url, api_key):
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
'Accept': 'application/json'
})
def get(self, path, params=None):
r = self.session.get(f'{self.base_url}{path}', params=params)
r.raise_for_status()
return r.json()
def post(self, path, payload):
r = self.session.post(f'{self.base_url}{path}', json=payload)
r.raise_for_status()
return r.json()
# Usage
client = APIClient('https://api.example.com', 'sk-proj-abc123')
tasks = client.get('/tasks', params={'status': 'open'})
new_task = client.post('/tasks', {'title': 'Write report'})ตรวจสอบความเข้าใจอย่างรวดเร็ว: เมธอด HTTP
ทดสอบความเข้าใจของคุณเกี่ยวกับเมธอด HTTP และรหัสสถานะ
สรุปพื้นฐาน HTTP
ตอนนี้คุณรู้พื้นฐาน HTTP ที่เอเจนต์ทุกตัวต้องพึ่งพาแล้ว:
- GET ดึงข้อมูล, POST สร้าง, PUT/PATCH อัปเดต และ DELETE ลบ
- 2xx = สำเร็จ, 4xx = เป็นความผิดของเอเจนต์, 5xx = เป็นความผิดของเซิร์ฟเวอร์
- ส่วนหัวส่งข้อมูลยืนยันตัวตน (
Authorization: Bearer) และรูปแบบข้อมูล (Content-Type: application/json) - ใช้
response.json()เพื่อแยกวิเคราะห์เนื้อหา และใช้.get()เพื่อเข้าถึงฟิลด์อย่างปลอดภัย - ออบเจ็กต์
Sessionใช้ส่วนหัวและการเชื่อมต่อร่วมกันระหว่างคำขอต่าง ๆ
เมื่อพื้นฐานเหล่านี้แน่นแล้ว คุณจะสามารถเชื่อมต่อเอเจนต์กับ REST API ใด ๆ ได้อย่างมั่นใจ
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน”
เมธอด HTTP รหัสสถานะ ส่วนหัว และรูปแบบคำขอ/การตอบกลับ JSON คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน
- การยืนยันตัวตน: คีย์ API และ OAuth
- การจัดการการตอบกลับและข้อผิดพลาดของ API
- การจำกัดอัตราและตรรกะการลองใหม่