เมื่อคุณสร้างแอปพลิเคชันใน Python อาจมีเวลาที่คุณต้องการเชื่อมต่อกับบริการของบุคคลที่สาม ตัวอย่างเช่น หากคุณสร้างเครื่องมือฟิตเนส คุณอาจต้องการเชื่อมต่อกับ Fitbit API เพื่อดูข้อมูลการออกกำลังกายของคุณ แอปที่ส่งข้อความสั้นอาจเชื่อมต่อกับ Twilio API
ใน Python ไลบรารี requests ช่วยให้คุณสร้างคำขอ (requests) เพื่อเชื่อมต่อบริการเว็บของบุคคลที่สามกับแอปพลิเคชันของคุณ ในคู่มือนี้ เราจะเรียนรู้เกี่ยวกับไลบรารี Python requests และวิธีใช้มันส่งคำขอ HTTP
Web Requests: บทนำสรุป
Requests (คำขอ) อยู่ที่ศูนย์กลางของอินเทอร์เน็ต เมื่อคุณคลิกที่บทความนี้ คำขอ HTTP ถูกส่งไปยังเซิร์ฟเวอร์ Career Karma คำขอนั้นบอกเซิร์ฟเวอร์ของเราว่าคุณต้องการดูหน้าเว็บไหน เพื่อให้เซิร์ฟเวอร์ของเราหาหน้านั้นได้ เมื่อพบหน้าเว็บแล้ว เซิร์ฟเวอร์เว็บของเราส่งคืนมันไปยังเบราว์เซอร์ของคุณ กระบวนการนี้ช่วยให้คุณเห็นบทช่วยสอนนี้
Web requests มีรูปแบบหลายแบบ ประเภทของคำขอที่คุณทำเพื่อดูหน้าเว็บนี้เรียกว่า GET request ประเภทนี้ช่วยให้คุณดึงข้อมูลได้ มีประเภทคำขออื่นๆ เช่น POST และ PUT ซึ่งใช้แก้ไขทรัพยากรบนเซิร์ฟเวอร์ สำหรับวัตถุประสงค์ของบทช่วยสอนนี้ เราจะเน้นที่ GET และ POST requests
วิธีติดตั้ง Requests
Requests เป็นไลบรารี HTTP สำหรับ Python ที่ช่วยให้คุณทำ web requests ได้
ก่อนที่เราจะทำ web requests ด้วย Python เราต้องติดตั้งไลบรารีโค้ด Python requests เราสามารถทำได้ด้วยคำสั่งต่อไปนี้:
pip install requests
ตอนนี้ที่เราดาวน์โหลดแพ็กเกจ Python แล้ว เราพร้อมที่จะทำ web request
วิธีทำ GET Request
ประเภท web request ที่คุณจะทำบ่อยที่สุดคือ GET request ประเภทนี้ช่วยให้คุณดึงข้อมูลจากเซิร์ฟเวอร์ได้
สมมติว่าเรากำลังสร้างแอปที่ช่วยให้คุณดึงลิสต์ข้อเท็จจริงเกี่ยวกับแมว (cat facts) เพื่อทำเช่นนั้น เราจะใช้ API ที่ชื่อ cat-facts API นี้เปิดสาธารณะ ดังนั้นเราไม่ต้องมีข้อมูลประจำตัวเพื่อลงชื่อเข้าใช้ เราสามารถใช้โค้ดนี้เพื่อทำคำขอไปยัง API:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.status_code)
โค้ดนี้คืนค่า: 200 มาแยกวิเคราะห์โค้ดของเรา
ในบรรทัดแรก เรานำเข้าไลบรารี requests นี่ช่วยให้เราเข้าถึงไลบรารี requests ที่เราจะใช้ในบทช่วยสอนนี้ จากนั้นเราใช้เมธอด requests.get() เพื่อทำ web request เราอาจใช้เมธอดอย่าง .put() หรือ .post() เพื่อทำประเภทคำขออื่นๆ แต่ในกรณีนี้เราแค่ต้องการดึงข้อมูลจาก cat-facts API
ต่อไป เราพิมพ์รหัสสถานะ (status code) จาก web request ของเรา เลข 200 ถูกคืนค่า ซึ่งบอกเราว่า web request ของเราทำสำเร็จ เราจะอภิบายความหมายของตัวเลขเหล่านี้ในภายหลังของบทช่วยสอน
การดู Request
ในตัวอย่างข้างต้น เราพิมพ์รหัสสถานะของคำขอของเรา แต่เราจะดูข้อมูลที่เราดึงมาได้อย่างไร? ข้อเท็จจริงเกี่ยวกับแมวอยู่ที่ไหน? นี่คือที่มาของเมธอด .text และ .json()
ดู Text Response
เราสามารถใช้เมธอด .text เพื่อดูผลลัพธ์ของ web request ของเรา:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.text)
โค้ดนี้คืนค่าลิสต์ของข้อเท็จจริงเกี่ยวกับแมว แต่ นี่ไม่ค่อยเป็นประโยชน์สำหรับเรา เพราะข้อมูลที่เราสืบค้นเป็น API แม้เราจะมีลิสต์ Python ของข้อเท็จจริงแมวแล้ว แต่มันยากที่จะอ่านเพราะอยู่ในรูปแบบ plain text
ดู JSON Response
รูปแบบที่มีประโยชน์กว่าที่ข้อเท็จจริงแมวของเราสามารถจัดเก็บได้คือ JSON เราสามารถดึงข้อมูล JSON จากคำขอของเราได้ด้วยโค้ดนี้:
print(res.json())
โค้ดของเราคืนค่าลิสต์ยาวของข้อเท็จจริงแมว นี่คือเรคอร์ดแรกในลิสต์:
{'_id': '58e009550aac31001185ed12', 'text': 'The oldest cat video on YouTube dates back to 1894.', 'type': 'cat', 'user': {'_id': '58e007480aac31001185ecef', 'name': {'first': 'Kasimir', 'last': 'Schulz'}}, 'upvotes': 6, 'userUpvoted': None}
สำเร็จ! เราดึงลิสต์ข้อเท็จจริงแมวของเราได้สำเร็จ
วิธีทำ POST Request
คุณยังสามารถใช้ไลบรารี requests เพื่อทำ POST request ได้ นี่จะช่วยให้คุณแก้ไขข้อมูลที่จัดเก็บบนเว็บเซิร์ฟเวอร์
สำหรับตัวอย่างนี้ เราจะใช้ Airtable API เพราะเราต้องใช้ API ที่รองรับ POST requests และ cat-facts API เป็น read-only
สมมติว่าเรามีฐานข้อมูลที่เราบันทึกถ้วยชาทั้งหมดที่เราดื่ม เราเพิ่งดื่มอีกถ้วยและต้องการเพิ่มลงฐานข้อมูล เราสามารถทำได้ด้วยโค้ดนี้:
import requests
headers = {
'Authorization': 'Bearer API_KEY',
'Content-Type': 'application/json',
}
data = '{"records": [{"fields": {"Drink": "Black Decaf Tea"}}]}'
res = requests.post('https://cat-fact.herokuapp.com/facts', headers=headers, data=data)
print(res.json())
โค้ดของเราคืนค่า:
{'records': [{'id': 'recqUEPuXEAXaNl1L', 'fields': {'Drink': 'Black Decaf Tea', 'Date': '2020-06-16T08:53:02.000Z'}, 'createdTime': '2020-06-16T08:53:02.000Z'}]}
นี่บอกเราว่า HTTP request ของเราสำเร็จ เราเพิ่งเพิ่มเรคอร์ดลงในฐานข้อมูล Airtable ของเราโดยใช้ API ของพวกเขา มาอภิบายบรรทัดโค้ดเหล่านี้เพิ่มเติม
แรก เรานำเข้าไลบรารี requests เพื่อที่เราจะทำ HTTP requests ในโค้ดของเราได้
เราจึงกำหนด Dictionary ที่มีสองคีย์และค่า: หนึ่งเก็บคีย์การยืนยันตัวตนของเรา และอีกอันระบุประเภทของเนื้อหาที่เราส่งไปยังเว็บเซิร์ฟเวอร์ นี่คือ headers ที่เราต้องส่งเพื่อทำคำขอไปยัง Airtable API
ต่อไป เราประกาศตัวแปรชื่อ data ที่เก็บข้อมูลที่เราต้องการส่งพร้อมกับ POST request ของเรา ในกรณีนี้ เรากำลังเพิ่มเครื่องดื่มชื่อ "Black Decaf Tea" ลงในฐานข้อมูลของเรา เราจึงใช้เมธอด requests.post() และระบุ headers และ data เป็นพารามิเตอร์ ซึ่งช่วยให้เราทำ POST request ไปยัง Airtable API
สุดท้าย เราพิมพ์ผลลัพธ์ของคำขอของเราในรูปแบบ JSON โดยใช้ res.json()
HTTP Status Codes (รหัสสถานะ HTTP)
โปรโตคอล HTTP คืนค่ารหัสสถานะที่ไม่ซ้ำกันเมื่อคุณทำ web request นี่ช่วยให้คุณเห็นว่าคำขอเว็บของคุณสำเร็จหรือไม่ หรือมีข้อผิดพลาดเกิดขึ้น คุณอาจเคยเห็นบางตัวแล้ว เช่น 404
นี่คือรายการอ้างอิงรหัสสถานะที่คุณอาจพบเมื่อทำคำขอด้วย Python requests:
- 1XX: Information (ข้อมูล)
- 2XX: Request was made successfully (คำขอสำเร็จ)
- 3XX: Request was redirected (คำขอถูกเปลี่ยนเส้นทาง)
- 4XX: Client-side error (ข้อผิดฝั่งไคลเอนต์)
- 5XX: Server-side error (ข้อผิดฝั่งเซิร์ฟเวอร์)
การรู้จักรหัสสถานะเหล่านี้ช่วยให้เราเพิ่มการดีบั๊กเข้าไปในโปรแกรมของเรา มาใช้ตัวอย่าง GET request จาก cat-facts API จากก่อนหน้านี้ สมมติว่าเราต้องการพิมพ์ข้อความหากทรัพยากรที่เราเข้าถึงไม่พบ เราสามารถทำได้ด้วยโค้ดนี้:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
if res.status_code == 200:
print("Success")
else:
print("Error")
โค้ดของเราคืนค่า: Success เนื่องจากรหัสสถานะของคำขอของเราคือ 200 ข้อความ "Success" จึงถูกพิมพ์ทางคอนโซล อย่างไรก็ตาม หากคำขอของเราล้มเหลว - ตัวอย่างเช่น เราอาจระบุ URL ที่ไม่ถูกต้อง - ข้อความ "Error" จะถูกพิมพ์ทางคอนโซลแทน
สรุป
ไลบรารี Python requests ช่วยให้คุณทำ HTTP requests ใน Python ในคู่มือนี้ เราอภิบายวิธีที่ไลบรารี Python requests ใช้ทำ GET และ POST requests แต่คุณยังสามารถทำ PUT และ DELETE requests ด้วยไลบรารีนี้ได้
เมื่อคุณใช้เมธอดอย่าง requests.get() หรือ requests.post() Python จะทำคำขอไปยังทรัพยากรเว็บที่คุณต้องการเข้าถึง คุณสามารถแนบ headers และ data พร้อมกับคำขอของคุณ ซึ่งช่วยให้คุณส่งข้อมูลหากคุณต้องการเปลี่ยนแปลงทรัพยากรเว็บที่คุณเป็นเจ้าของ
ตอนนี้คุณพร้อมที่จะเริ่มใช้ไลบรารี Python requests อย่างมืออาชีพแล้ว!