Khi xây dựng ứng dụng Python, có lúc bạn muốn kết nối dịch vụ bên thứ ba. Ví dụ, xây dựng công cụ thể dục kết nối Fitbit API xem dữ liệu tập luyện; app gửi tin nhắn kết nối Twilio API.
Trong Python, thư viện requests cho phép tạo request kết nối dịch vụ web bên thứ ba ứng dụng. Trong hướng dẫn, chúng ta học thư viện requests Python và cách dùng gửi HTTP request.
Web Request: Ôn Tập
Request là trung tâm Internet. Khi click bài viết này, HTTP request gửi đến server Career Karma. Request báo server trang web bạn muốn xem để server tìm trang. Khi trang web tìm thấy, server trả về trình duyệt. Quy trình này cho bạn xem hướng dẫn.
Web request nhiều dạng. Loại request xem trang web gọi GET request. Loại này cho phép lấy dữ liệu. Có loại khác POST, PUT, dùng sửa tài nguyên server. Hướng dẫn tập trung GET và POST.
Cách Cài Requests
Requests là thư viện HTTP Python cho phép web request.
Trước khi tạo web request Python, cài thư viện requests Python. Làm bằng lệnh:
pip install requests
Đã tải gói Python, sẵn sàng tạo web request.
Cách Tạo GET Request
Loại web request phổ biến nhất là GET request. Loại này cho phép lấy dữ liệu từ server.
Giả sử tạo app lấy danh sách sự thật về mèo. Dùng API cat-facts. API công khai, không cần đăng nhập. Dùng mã tạo request API:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.status_code)
Mã trả về: 200. Phân tích mã.
Dòng đầu, nhập thư viện requests. Cho phép truy cập thư viện requests dùng hướng dẫn. Sau đó dùng requests.get() tạo web request. Có thể dùng .put() hoặc .post() tạo request khác, nhưng chỉ cần lấy dữ liệu API cat-facts.
Tiếp, in mã trạng thái web request. Số 200 trả về, báo request thành công. Thảo luận ý nghĩa số sau.
Xem Request
Ví dụ trên in mã trạng thái. Làm sao xem dữ liệu lấy được? Sự thật mèo đâu? Đó là phương thức .text và .json().
Xem Phản Hồi Văn Bản
Dùng .text xem kết quả web request:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.text)
Mã trả về danh sách sự thật mèo. Nhưng không thực tế vì dữ liệu truy vấn là API. Dù có danh sách sự thật mèo Python, khó đọc vì văn bản thuần.
Xem Phản Hồi JSON
Định dạng hữu ích hơn lưu sự thật mèo là JSON. Lấy dữ liệu JSON từ request bằng mã:
print(res.json())
Mã trả về danh sách dài sự thật mèo. Bản ghi đầu danh sách:
{'_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}
Thành công! Chúng ta lấy danh sách sự thật mèo.
Cách Tạo POST Request
Bạn cũng dùng thư viện requests tạo POST request. Cho phép sửa dữ liệu lưu server web.
Ví dụ dùng API Airtable. Cần API hỗ trợ POST request, cat-facts chỉ đọc.
Giả sử có database ghi chép ly trà uống. Vừa uống ly nữa muốn thêm database. Làm bằng mã:
import requests
headers = {
'Authorization': 'Bearer API_KEY',
'Content-Type': 'application/json',
}
data = '{"records": [{"fields": {"Drink": "Black Decaf Tea"}}]}'
res = requests.post('https://api.airtable.com/v0/...', headers=headers, data=data)
print(res.json())
Mã trả về:
{'records': [{'id': 'recqUEPuXEAXaNl1L', 'fields': {'Drink': 'Black Decaf Tea', 'Date': '2020-06-16T08:53:02.000Z'}, 'createdTime': '2020-06-16T08:53:02.000Z'}]}
Cho biết HTTP request thành công. Vừa thêm bản ghi database Airtable dùng API. Thảo luận dòng mã.
Đầu, nhập thư viện requests để tạo HTTP request mã.
Định nghĩa dictionary chứa hai khóa giá trị: một lưu khóa xác thực, một chỉ định loại nội dung gửi server. Đây header cần thiết request Airtable API.
Tiếp, khai báo biến data lưu dữ liệu gửi cùng POST request. Thêm đồ uống "Black Decaf Tea" database. Dùng requests.post() chỉ định header và data tham số, tạo POST request Airtable API.
Cuối, in kết quả request định dạng JSON dùng res.json().
Mã Trạng Thái HTTP
Giao thức HTTP trả mã trạng thái duy nhất khi web request. Cho phép xem request thành công hay lỗi. Bạn thấy vài cái, như 404.
Danh sách tham khảo mã trạng thái gặp khi request Python requests:
- 1XX: Thông tin
- 2XX: Request thành công
- 3XX: Request chuyển hướng
- 4XX: Lỗi phía client
- 5XX: Lỗi phía server
Biết mã trạng thái cho phép thêm debug chương trình. Lấy GET request cat-facts trước. Giả sử muốn in thông báo nếu tài nguyên truy cập không tìm thấy. Làm bằng mã:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
if res.status_code == 200:
print("Success")
else:
print("Error")
Mã trả về: Success. Vì mã trạng thái 200, thông báo "Success" in bảng điều khiển. Tuy nhiên, nếu request thất bại – ví dụ URL không hợp lệ – thông báo "Error" in bảng điều khiển.
Kết Luận
Thư viện requests Python cho phép tạo HTTP request trong Python. Hướng dẫn thảo luận cách thư viện requests dùng tạo GET và POST request, nhưng bạn cũng tạo PUT, DELETE request.
Khi dùng phương thức requests.get() hoặc requests.post(), Python tạo request tài nguyên web bạn muốn truy cập. Bạn gắn header và data request, cho phép gửi thông tin nếu muốn thay đổi tài nguyên web sở hữu.
Bây giờ bạn sẵn sàng dùng thư viện requests Python như chuyên gia!