Ví dụ máy khách python

Cú pháp rõ ràng, đơn giản của Python làm cho nó trở thành một ngôn ngữ lý tưởng để tương tác với các API REST và theo kiểu điển hình Python, có một thư viện được thực hiện đặc biệt để cung cấp . request. Yêu cầu Python là một công cụ mạnh mẽ cung cấp lịch trình đơn giản của Python để thực hiện các yêu cầu HTTP cho bất kỳ API nào trên thế giới. Tại NYLAS, chúng tôi đã xây dựng các API REST của chúng tôi cho email, lịch và Contactson Python và chúng tôi xử lý hơn 500 triệu API yêu cầu mỗi ngày, vì vậy, một cách tự nhiên, chúng tôi phụ thuộc vào một số cuộc tấn công . Yêu cầu. Yêu cầu Python là một công cụ mạnh mẽ cung cấp sự sang trọng đơn giản của Python để thực hiện các yêu cầu HTTP cho bất kỳ API nào trên thế giới. Tại Nylas, chúng tôi đã xây dựng API REST dành cho email, lịch và danh bạ trên Python, và chúng tôi xử lý hơn 500 triệu yêu cầu API mỗi ngày, do đó, một cách tự nhiên, chúng tôi phụ thuộc rất nhiều vào thư viện Yêu cầu Python thư viện

Nội dung chính Hiển thị

Vai trò của HTTP, API và các phần còn lại

Giao diện lập trình ứng dụng [API] là một dịch vụ web cấp quyền truy cập vào dữ liệu và phương thức cụ thể mà các ứng dụng khác có thể truy cập - và đôi khi chỉnh sửa - thông qua các thông số . Sự đơn giản này giúp dễ dàng tích hợp API vào nhiều ứng dụng khác nhau. Chuyển trạng thái đại diện [REST], có thể là phong cách kiến ​​trúc biến phổ biến nhất của API cho các dịch vụ web. Nó bao gồm một bộ hướng dẫn được thiết kế để đơn giản hóa giao tiếp máy khách / máy chủ. API REST làm cho dữ liệu truy cập đơn giản hơn và logic hơn nhiều. [API] là dịch vụ web cấp quyền truy cập vào dữ liệu và phương thức cụ thể mà các ứng dụng khác có thể truy cập – và đôi khi chỉnh sửa – thông qua các giao thức HTTP tiêu chuẩn, giống như . Sự đơn giản này giúp dễ dàng tích hợp nhanh các API vào nhiều ứng dụng khác nhau. Chuyển giao trạng thái đại diện [REST], có lẽ là kiểu kiến ​​trúc API phổ biến nhất cho các dịch vụ web. Nó bao gồm một tập hợp các hướng dẫn được thiết kế để đơn giản hóa giao tiếp máy khách/máy chủ. API REST giúp truy cập dữ liệu đơn giản và hợp lý hơn nhiều.

Request

Khi bạn muốn tương tác với dữ liệu thông qua API REST, đây được gọi là yêu cầu. Một yêu cầu được tạo thành từ các thành phần sau

Điểm cuối - URL phân vùng dữ liệu bạn đang tương tác. Tương tự như cách một URL trang web được gắn với một trang cụ thể, điểm cuối URL được gắn với một công cụ tài nguyên trong API. – URL mô tả loại dữ liệu bạn đang tương tác. Tương tự như cách URL của trang web được liên kết với một trang cụ thể, URL điểm cuối được liên kết với một tài nguyên cụ thể trong API.

Phương thức - Chỉ định cách bạn tương tác với tài nguyên nằm ở điểm cuối được cung cấp. API REST có thể cung cấp các phương thức để bật chức năng tạo, đọc, cập nhật và xóa [CRUD] đầy đủ. Dưới đây là các phương pháp phổ biến mà hầu hết các API REST cung cấp. – Chỉ định cách bạn đang tương tác với tài nguyên nằm ở điểm cuối được cung cấp. API REST có thể cung cấp các phương thức để kích hoạt đầy đủ chức năng Tạo, Đọc, Cập nhật và Xóa [CRUD]. Dưới đây là các phương thức phổ biến mà hầu hết các API REST cung cấp.

  • Nhận - Lấy dữ liệu
  • Set - replace data
  • Đăng - Tạo dữ liệu
  • Clear - Xóa dữ liệu

Dữ liệu - Nếu bạn sử dụng một phương thức liên quan đến việc thay đổi dữ liệu trong API REST, bạn cần bao gồm tải dữ liệu quan trọng với yêu cầu bao gồm tất cả dữ liệu sẽ được tạo hoặc chỉnh sửa . – Nếu bạn đang sử dụng một phương thức liên quan đến việc thay đổi dữ liệu trong API REST, thì bạn sẽ cần bao gồm tải trọng dữ liệu với yêu cầu bao gồm tất cả dữ liệu sẽ được tạo hoặc sửa đổi.

Tiêu đề - chứa bất kỳ siêu dữ liệu nào cần được bao gồm trong yêu cầu, thực tế như mã thông báo xác thực, loại nội dung nên được trả về và bất kỳ bộ đệm chính sách nào. – Chứa bất kỳ siêu dữ liệu nào cần được đưa vào yêu cầu, chẳng hạn như mã thông báo xác thực, loại nội dung sẽ được trả lại và bất kỳ chính sách bộ đệm nào.

phản hồi

Khi bạn thực hiện yêu cầu, bạn sẽ nhận được phản hồi từ API. Giống như trong yêu cầu, nó sẽ có tiêu đề phản hồi và dữ liệu phản hồi, nếu có. Tiêu đề phản hồi bao gồm siêu dữ liệu hữu ích về phản hồi, trong khi dữ liệu phản hồi trả về những gì bạn thực sự yêu cầu. This could be any type of data any, because it thực sự phụ thuộc vào API. Văn bản thường được trả về dưới dạng JSON, nhưng các ngôn ngữ đánh dấu khác như XML cũng có thể. & NBSP; 

Hãy cùng xem xét một ví dụ đơn giản về yêu cầu và phản hồi. Trong thiết bị đầu cuối, chúng tôi sẽ sử dụng Curl để thực hiện yêu cầu nhận API thông báo mở rộng. Đây là một API đơn giản nhưng tiện lợi có thông tin về các phi hành gia hiện đang ở trong không gian

curl -X GET "//api.open-notify.org/astros.json"

Bạn sẽ thấy phản hồi ở định dạng JSON liệt kê dữ liệu về các phi hành gia này, tại thời điểm của bài viết này có ba người trong chuyến du lịch lịch sử đến Trạm vũ trụ quốc tế. chuyến đi lịch sử đến Trạm Vũ trụ Quốc tế.

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}

Cách sử dụng các yêu cầu Python với API REST

Hiện tại, hãy để Lừa xem những gì cần thiết để tích hợp với API REST bằng các yêu cầu Python. Đầu tiên, bạn cần phải có phần mềm cần thiết; . Sau đó, đi đến dòng lệnh và cài đặt mô-đun yêu cầu Python với PIP. Pythonpip được cài đặt trên máy của bạn. Sau đó, đi tới dòng lệnh và cài đặt mô-đun yêu cầu python với pip.

pip install requests

Bây giờ bạn đã sẵn sàng để bắt đầu sử dụng các yêu cầu Python để tương tác với API REST, hãy chắc chắn rằng bạn nhập thư viện yêu cầu vào bất kỳ lệnh nào bạn muốn sử dụng trong đó

import requests

Yêu cầu dữ liệu cách mạng với GET

Phương thức GET được sử dụng để truy cập dữ liệu cho một công cụ tài nguyên có thể từ API REST;

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response

Đối tượng phản hồi chứa tất cả dữ liệu được gửi từ máy chủ để đáp ứng yêu cầu GET của bạn, bao gồm các tiêu đề và tải dữ liệu quan trọng. Khi ví dụ này được mã hóa trong đối tượng được phản hồi vào bảng điều khiển, nó chỉ cần trả lại tên của lớp đối tượng và mã trạng thái, yêu cầu được trả về [nhiều hơn về mã trạng thái sau]. [thêm về mã trạng thái sau].

Mặc dù thông tin này có thể hữu ích, nhưng rất có thể bạn quan tâm đến nội dung của yêu cầu chính, có thể truy cập được theo một số cách

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

Cách sử dụng tham số truy vấn & nbsp; 

Các truy vấn có thể được sử dụng để lọc dữ liệu mà API trả về và chúng được thêm vào dưới dạng các tham số truy vấn được gắn vào URL cuối cùng. Với Python yêu cầu, điều kiện này được xử lý thông qua các đối số PARAMS, chấp nhận một từ điển đối tượng;

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]

Lệnh in sẽ trả lại một cái gì đó giống như thế này

{
  '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}
  ]
}

Cách tạo và sửa đổi dữ liệu với bài đăng và đặt

Theo cách tương tự như các tham số truy vấn, bạn có thể sử dụng đối số dữ liệu để bổ sung dữ liệu được liên kết cho các yêu cầu phương thức đặt và đăng

________số 8

Cách truy cập các tiêu đề nghỉ dưỡng

Bạn cũng có thể lấy siêu dữ liệu từ phản hồi thông tin qua các tiêu đề. Ví dụ. để xem ngày phản hồi, chỉ cần xác định rằng thuộc tính `tiêu đề`

print[response.headers["date"]] 
>>>> 'Wed, 11 June 2020 19:32:24 GMT'

Đối chiếu với các API mở, bao gồm các điều khiển cơ bản. Tuy nhiên, nhiều API có thể được sử dụng bởi bất kỳ ai. Đối với những người đó, hãy để Lừa đi qua cách xác thực để nghỉ ngơi API

Cách xác thực cho API REST

Cho đến nay, bạn đã thấy cách tương tác với các API REST mở mà không yêu cầu bất kỳ sự cho phép nào. Tuy nhiên, nhiều API REST yêu cầu bạn xác nhận với chúng trước khi bạn có thể truy cập các điểm cuối cụ thể, đặc biệt nếu chúng xử lý dữ liệu cảm ứng.  

Có một vài phương thức xác thực biến phổ biến cho các API REST có thể được xử lý với các yêu cầu Python. Cách đơn giản nhất là chuyển đổi tên người dùng và mật khẩu của bạn đến điểm cuối cùng thích hợp dưới dạng http cơ bản xác thực;

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
0

Một phương thức an toàn hơn là có mã thông báo truy cập hoạt động tương đương với kết hợp tên người dùng/mật khẩu; . Tại NYLAS, chúng tôi sử dụng OAuth ba chân để cấp mã thông báo truy cập cho các tài khoản người dùng bị giới hạn trong phạm vi xác định dữ liệu và chức năng có thể truy cập được. This process is could be current in the service Auth has been archive nylas. OAuth. Tại Nylas, chúng tôi sử dụng OAuth ba chân để cấp mã thông báo truy cập cho tài khoản người dùng bị giới hạn trong phạm vi xác định dữ liệu và chức năng cụ thể có thể . Quá trình này được thể hiện trong dịch vụ Nylas Hosted Auth.

Khi bạn có mã thông báo truy cập, bạn có thể cung cấp cho nó dưới dạng mã thông báo của người mang trong tiêu đề yêu cầu. Đây là cách an toàn nhất để xác thực API REST có mã thông báo truy cập

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
1

Có khá nhiều phương pháp khác để xác thực API REST, bao gồm Digest, Kerberos, NTLM và AuthBase. Việc sử dụng những điều này phụ thuộc vào quyết định kiến ​​trúc của nhà sản xuất API REST. tiêu hóa, Kerberos, NTLM . Việc sử dụng những thứ này phụ thuộc vào quyết định kiến ​​trúc của nhà sản xuất API REST. , and AuthBase. The use of these depends on the architecture decisions of the REST API producer.

Sử dụng các phiên bản để quản lý mã thông báo truy cập & nbsp;

Các đối tượng phiên bản hữu ích khi làm việc với các yêu cầu Python như một công cụ để tồn tại các tham số cần thiết để thực hiện nhiều yêu cầu trong một phiên bản, như mã thông báo truy cập. Ngoài ra, quản lý phiên bản cookie có thể cung cấp một sự gia tăng hiệu suất tốt vì bạn không cần phải mở kết nối mới cho mọi yêu cầu. hữu ích khi làm việc với Yêu cầu Python như một công cụ để duy trì các tham số cần thiết để thực hiện nhiều yêu cầu trong một phiên, chẳng hạn như mã thông báo truy cập. Ngoài ra, việc quản lý cookie phiên có thể giúp tăng hiệu suất tốt vì bạn không cần mở kết nối mới cho mọi yêu cầu.

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
2

Cách xử lý lỗi HTTP với các yêu cầu Python

Các cuộc gọi API không luôn luôn đi theo kế hoạch và có vô số lý do tại sao các API yêu cầu có thể thất bại có thể là lỗi của máy chủ hoặc máy khách. Nếu bạn sẽ sử dụng API REST, bạn cần hiểu cách xử lý các lỗi mà chúng xuất hiện khi mọi thứ trở nên sai lầm khi làm cho mã của bạn mạnh mẽ hơn. Phần này bao gồm mọi thứ bạn cần biết về việc xử lý các lỗi HTTP với các yêu cầu Python

Những điều chỉnh cơ bản của mã trạng thái HTTP

Trước khi chúng tôi đi sâu vào các chi tiết cụ thể của các yêu cầu Python, trước tiên chúng tôi cần lùi lại một bước và hiểu mã trạng thái HTTP là gì và chúng tôi liên quan đến các lỗi bạn có thể gặp phải như thế nào

Tất cả các trạng thái mã rơi vào một năm loại. & NBSP; 

  • Thông tin 1xx - chỉ ra rằng đã nhận được yêu cầu và khách hàng nên tiếp tục thực hiện các yêu cầu để tải dữ liệu quan trọng. Bạn có thể đã thắng cần phải lắng nghe các mã trạng thái này trong khi làm việc với các yêu cầu của Python
  • 2xx thành công - chỉ ra rằng một hành động được yêu cầu đã được nhận, hiểu và chấp nhận. Bạn có thể sử dụng các mã này để xác minh sự tồn tại của dữ liệu trước khi cố gắng hành động theo nó
  • Chuyển hướng 3xx - Cho biết rằng máy khách phải thực hiện một hành động bổ sung để hoàn thành yêu cầu như truy cập tài nguyên thông qua proxy hoặc điểm cuối khác. Bạn có thể thực hiện các yêu cầu bổ sung hoặc sửa đổi các yêu cầu của bạn để xử lý các mã này
  • Lỗi máy khách 4xx - cho biết các vấn đề với máy khách, chẳng hạn như thiếu ủy quyền, truy cập bị cấm, phương pháp không được phép hoặc cố gắng truy cập tài nguyên không tồn tại. Điều này thường chỉ ra các cấu hình lỗi trên ứng dụng máy khách
  • Lỗi máy chủ 5xx - Cho biết sự cố do máy chủ cung cấp API. Có rất nhiều lỗi máy chủ và họ thường yêu cầu nhà cung cấp API giải quyết

Cách kiểm tra lỗi HTTP với yêu cầu Python

Các đối tượng phản hồi có thuộc tính Status_Code có thể được sử dụng để kiểm tra bất kỳ lỗi nào mà API có thể báo cáo. Ví dụ tiếp theo cho thấy cách sử dụng thuộc tính này để kiểm tra mã trạng thái HTTP thành công và 404 và không tìm thấy và bạn có thể sử dụng định dạng tương tự này cho tất cả các mã trạng thái HTTP

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
3

Để xem điều này trong hành động, hãy thử xóa chữ cái cuối cùng khỏi URL cuối cùng, API sẽ trả về mã trạng thái 404

Nếu bạn muốn yêu cầu tăng ngoại lệ cho tất cả các mã lỗi [4xx và 5xx], bạn có thể sử dụng hàm RAISE_FOR_STATUS [] và bắt các công cụ lỗi bằng cách sử dụng các yêu cầu phân tích hợp nhất . Ví dụ tiếp theo điều này hoàn thành các điều kiện tương tự như ví dụ trước đó. [4xx và 5xx], bạn có thể sử dụng hàm raise_for_status[] và phát hiện các lỗi cụ thể bằng cách sử dụng các ngoại lệ tích hợp trong Yêu cầu. Ví dụ tiếp theo này hoàn thành điều tương tự như ví dụ mã trước đó.

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
4

Quá NhiềuChuyển hướng

Một cái gì đó thường được biểu thị bằng mã trạng thái HTTP 3xx là yêu cầu chuyển hướng đến một vị trí khác cho tài nguyên mà bạn yêu cầu. Điều này đôi khi có thể dẫn đến một vấn đề mà bạn kết thúc bằng một vòng chuyển hướng vô hạn. Mô -đun yêu cầu Python có lỗi Toomanyredirects mà bạn có thể sử dụng để xử lý vấn đề này. Để giải quyết vấn đề này, nó có thể là URL mà bạn sử dụng để truy cập tài nguyên là sai và cần phải thay đổi

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
5

Bạn có thể tùy chọn sử dụng các tùy chọn yêu cầu để đặt số lượng chuyển hướng tối đa

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
6

Hoặc tắt hướng hoàn toàn trong các tùy chọn yêu cầu của bạn

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
7

Failed to connect

Cho đến nay, chúng tôi chỉ xem xét các lỗi đến từ một máy chủ đang hoạt động. Điều gì xảy ra nếu bạn không nhận được phản hồi từ máy chủ? . Yêu cầu Python cung cấp kết nối ngoại lệLỗi kết nối cho biết khi bất kỳ máy khách nào của bạn không thể kết nối với máy chủ.  

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
8

Loại lỗi này có thể là tạm thời hoặc vĩnh viễn. Trong bản kịch trước đây, bạn nên thử lại yêu cầu một lần nữa để xem có kết quả khác không. Trong bản viết sau, bạn nên đảm bảo rằng bạn có thể xử lý việc không thể truy cập dữ liệu từ API và nó có thể yêu cầu bạn điều tra các vấn đề kết nối của riêng mình

Hết giờ

Thời gian chờ lỗi xảy ra khi bạn có thể kết nối với API máy chủ, nhưng nó không hoàn thành yêu cầu trong khoảng thời gian được quy định. Tương tự như các lỗi khác mà chúng tôi đã xem xét, các yêu cầu Python có thể xử lý lỗi này với ngoại lệ thời gian chờ xử lý.  

{
  "number": 3,
  "message": "success",
  "people": [
    {
      "craft": "ISS",
      "name": "Chris Cassidy"
    }, 
    {
      "craft": "ISS",
      "name": "Anatoly Ivanishin"
    }, 
    {
      "craft": "ISS",
      "name": "Ivan Vagner"
    }
  ]
}
9

Trong ví dụ này, thời gian chờ được đặt dưới dạng một phần của một giây thông qua các tùy chọn yêu cầu. Hầu hết các API không thể trả lời điều này một cách nhanh chóng, vì vậy mã sẽ tạo ra một ngoại lệ trong thời gian chờ. Bạn có thể tránh lỗi này bằng cách đặt thời gian dài hơn cho lệnh của mình, tối ưu hóa các yêu cầu của bạn nhỏ hơn hoặc thiết lập vòng lặp thử lại cho yêu cầu. Điều này đôi khi cũng có thể chỉ đưa ra một vấn đề với nhà cung cấp API. Một giải pháp cuối cùng là kết hợp các cuộc gọi API không đồng bộ đến & nbsp;

Cách thực hiện các yêu cầu API mạnh mẽ

  . Nếu chúng tôi đặt tất cả các lỗi mà chúng tôi đã nói đến cùng nhau, thì chúng tôi có một cách khá liền mạch để xử lý bất kỳ lỗi yêu cầu HTTP nào theo cách của chúng tôi.

pip install requests
0

Tìm hiểu thêm về Python

Nếu bạn đã làm cho nó đến bây giờ, xin chúc mừng. Bạn có thể đang trên đường trở thành một hướng dẫn yêu cầu Python mà không có API nghỉ ngơi nào là một trận chiến quá tuyệt vời. Bạn muốn tiếp tục học hỏi?

Chủ Đề