Trong hướng dẫn này, chúng ta sẽ xem xét toàn diện cách tạo các yêu cầu HTTP bằng Yêu cầu Python và tìm hiểu cách sử dụng chức năng này để tích hợp với các API REST
nội dung
curl -X GET "//api.open-notify.org/astros.json"
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }
import requests
import requests response = requests.get["//api.open-notify.org/astros.json"] print[response] >>>> Response
response.content[] # Return the raw bytes of the data payload response.text[] # Return a string representation of the data payload response.json[] # This method is convenient when the API returns JSON
query = {'lat':'45', 'lon':'180'} response = requests.get['//api.open-notify.org/iss-pass.json', params=query] print[response.json[]]
{ 'message': 'success', 'request': { 'altitude': 100, 'datetime': 1590607799, 'latitude': 45.0, 'longitude': 180.0, 'passes': 5 }, 'response': [ {'duration': 307, 'risetime': 1590632341}, {'duration': 627, 'risetime': 1590637934}, {'duration': 649, 'risetime': 1590643725}, {'duration': 624, 'risetime': 1590649575}, {'duration': 643, 'risetime': 1590655408} ] }
# Create a new resource response = requests.post['//httpbin.org/post', data = {'key':'value'}] # Update an existing resource requests.put['//httpbin.org/put', data = {'key':'value'}]
print[response.headers["date"]] >>>> 'Wed, 11 June 2020 19:32:24 GMT'
requests.get[ '//api.github.com/user', auth=HTTPBasicAuth['username', 'password'] ]
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }0
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }1
Cách xử lý lỗi HTTP với yêu cầu Python
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }2
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }3
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }4
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }5
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }6
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }7
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }8
{ "number": 3, "message": "success", "people": [ { "craft": "ISS", "name": "Chris Cassidy" }, { "craft": "ISS", "name": "Anatoly Ivanishin" }, { "craft": "ISS", "name": "Ivan Vagner" } ] }9
Trong bài học này, chúng ta sẽ xem cách sử dụng Python để giao tiếp với Giao diện lập trình ứng dụng [API]. API là một giao diện phần mềm cho phép các ứng dụng giao tiếp với các ứng dụng khác. Trong trường hợp của chúng tôi, chúng tôi sẽ giao tiếp với API bằng Python
Chúng tôi sẽ sử dụng mô-đun yêu cầu Python. Với mô-đun này, bạn có thể gửi tất cả các loại yêu cầu HTTP. Hãy cài đặt nó với PIP
import requests0
Chúng tôi sẽ thử các API khác nhau để có thể kiểm tra những thứ khác nhau
- API không cần xác thực. API đơn giản nhất để làm việc, thật tuyệt khi tìm hiểu những điều cơ bản
- API có tham số truy vấn. chúng ta có thể sử dụng điều này để gửi tham số tới API
- API có xác thực. hầu hết các API đều yêu cầu xác thực. Tôi sẽ chỉ cho bạn một ví dụ về cách xác thực bằng API
API không có xác thực
Khi bạn cố gắng giao tiếp với một API lần đầu tiên bằng Python, bạn muốn đảm bảo rằng bạn dùng thử một API dễ hiểu và có tài liệu phù hợp. Nếu có thể, API không nên có xác thực, do đó bạn không phải lo lắng về các phương thức xác thực như mã thông báo, khóa API, OAuth, v.v.
Một API như vậy là API Date Nager. Bạn có thể sử dụng API này để tìm nạp các ngày nghỉ lễ cho bất kỳ quốc gia và năm nào. Đó là một API đơn giản không yêu cầu xác thực và có tài liệu đàng hoàng
Đây là mã mẫu của tôi
Hãy để tôi giải thích đoạn mã trên
- Chúng tôi sử dụng mô-đun yêu cầu để gửi yêu cầu HTTP GET tới
- https. //ngày tháng. người quản lý. tại/api/v2/PublicHolidays/2020/US
- API phản hồi với mã trạng thái HTTP 200 khi chúng tôi có thể kết nối
- API trả về dữ liệu được yêu cầu ở định dạng JSON. Chúng tôi định dạng JSON thành một từ điển Python và lưu trữ nó trong "dữ liệu" biến
- Khi API không thể tìm thấy nội dung được yêu cầu, nó sẽ trả về mã trạng thái HTTP 404
- Khi API trả về bất kỳ mã trạng thái HTTP nào khác, chúng tôi biết đã xảy ra sự cố
- Chúng tôi lặp lại từ điển của mình và in tất cả các khóa có tên tên
Xuất sắc. Bây giờ chúng tôi có một danh sách tất cả các ngày lễ của Hoa Kỳ vào năm 2020
Tham số truy vấn
Hãy tiếp tục với một ví dụ nâng cao hơn một chút. Lần này chúng tôi sử dụng API Datamuse. API này là một công cụ truy vấn tìm từ. Nó cho phép bạn gửi truy vấn để tìm các từ phù hợp với tiêu chí nhất định. Không phải thứ mà chúng tôi với tư cách là kỹ sư mạng có thể cần, nhưng đó là một cách tuyệt vời để kiểm tra các tham số truy vấn và Datamuse cung cấp tài liệu tốt
Ví dụ: giả sử tôi muốn tìm các từ có vần với từ “mạng”. Bạn có thể sử dụng URL sau cho việc này
https. //api. dữ liệu. com/words?rel_rhy=mạng
Hãy tiếp tục và mở liên kết ở trên trong trình duyệt web của bạn. Phần trong URL sau ?
Hãy xem liệu chúng ta có thể giao tiếp với API này bằng Python không
Đoạn mã trên rất giống với ví dụ đầu tiên của chúng tôi. Tôi sử dụng mô-đun yêu cầu để gửi yêu cầu HTTP GET tới URL. Đoạn mã trên hoạt động, nhưng chúng ta có thể cải thiện nó theo cách Pythonic hơn
Pythonic có nghĩa là bạn sử dụng mã tuân theo các phương pháp hay nhất dành cho Python và sử dụng nó theo cách mà nó dự định sẽ được sử dụng
Hãy thử một cái gì đó khác. Đây là mã của tôi
Trong đoạn mã trên, tôi đã tách URL khỏi tham số truy vấn. Bây giờ chúng tôi cũng sử dụng
import requests1 thay vì
import requests2
Đầu ra hoàn toàn giống nhau, nhưng mã của chúng tôi trông gọn gàng hơn một chút do tham số truy vấn riêng biệt
Thay vì sử dụng thư viện yêu cầu, bạn có thể sử dụng một số mô-đun khác. Ví dụ: Datamuse cũng có mô-đun Python. Các mô-đun này thường sử dụng mô-đun yêu cầu dưới mui xe và loại bỏ một số phức tạp
Sử dụng mô-đun có cả ưu và nhược điểm. Ưu điểm của mô-đun là thường xây dựng thứ gì đó nhanh hơn. Nhược điểm là một số mô-đun có thể hoạt động ngày hôm nay, nhưng sẽ không được duy trì trong tương lai
Ví dụ: nếu bạn muốn giao tiếp với API Twitter, bạn có thể xây dựng thứ gì đó từ đầu hoặc sử dụng mô-đun phổ biến. một ví dụ như Tweety
Trong trường hợp của Tweety, mô-đun này đã tồn tại được 8 năm và được duy trì tốt. Nếu bạn tìm thấy một mô-đun và lần cuối ai đó làm việc với nó là hơn hai năm trước, tốt hơn hết là bạn nên bỏ qua nó và sử dụng trực tiếp thư viện yêu cầu. Bạn vẫn có thể xem mã và sử dụng các phần của mô-đun làm nguồn cảm hứng cho mã của riêng mình
Xác thực API
Hãy chuyển sang ví dụ tiếp theo. Làm thế nào về một API yêu cầu xác thực? . Làm thế nào về chúng tôi giao tiếp với? . Bạn có thể giao tiếp với API của họ mà không cần đăng ký
Tôi đã giữ mã mẫu của mình càng ngắn càng tốt, không có các khối if/else hoặc try/ngoại trừ để chúng tôi có thể tập trung hoàn toàn vào phần xác thực. Đây là mã
Hãy để tôi giải thích đoạn mã trên
- Chúng tôi có hai chức năng
- Hàm get_token xác thực với DNA Center
- Chúng tôi gửi một yêu cầu POST HTTP bao gồm tên người dùng, mật khẩu và tiêu đề chỉ định rằng chúng tôi sử dụng định dạng JSON
- Khi API Trung tâm DNA xác thực chúng tôi thành công, API sẽ trả về mã thông báo mà chúng tôi cần sử dụng cho bất kỳ yêu cầu nào khác
- Chúng tôi lưu trữ mã thông báo trong biến “mã thông báo”
- Hàm get_data_from_dna_center lấy dữ liệu từ DNA Center
- Chúng tôi gửi yêu cầu HTTP GET bao gồm tiêu đề với mã thông báo của chúng tôi
- URL cơ sở cho API này là HTTPS. //sandboxdnac. cisco. com/api/v1
- “Điểm cuối” xác định dữ liệu mà chúng tôi muốn truy xuất
- Hàm get_token xác thực với DNA Center
Xuất sắc. Chúng tôi nhận được một danh sách các thiết bị mạng và thời gian hoạt động của chúng
Khi làm việc với API, một IDE có trình gỡ lỗi phù hợp sẽ rất hữu ích
Phần kết luận
Bây giờ bạn đã học cách giao tiếp với API bằng Python
- API không cần xác thực
- API có tham số truy vấn
- API có xác thực
Những ví dụ này giúp hiểu những điều cơ bản. Tuy nhiên, bạn phải luôn kiểm tra tài liệu API để tìm hiểu cách giao tiếp với API. Nếu bạn may mắn, họ cung cấp các ví dụ cho Python hoặc bạn có thể sử dụng một mô-đun để không phải làm việc trực tiếp với mô-đun yêu cầu
Một bài học khác mà bạn có thể thích là bài học Giới thiệu về REST API. Trong bài học này, tôi giải thích API REST là gì và cách giao tiếp với bộ định tuyến CSR1000v bằng API REST