Hướng dẫn can you use rest api with python? - bạn có thể sử dụng api nghỉ với python không?

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 Python điển hình, có một thư viện được thực hiện đặc biệt để cung cấp chức năng đó: yêu cầu. Yêu cầu Python là một công cụ mạnh mẽ cung cấp sự thanh lịch đơ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 một tấn vào thư viện Python yêu cầu.Requests. Python Requests is a powerful tool that provides the simple elegance of Python to make HTTP requests to any API in the world. At Nylas, we built our REST APIs for email, calendar, and contacts on Python, and we process over 500 million API requests a day, so naturally, we depend a ton on the Python Requests library.

Vai trò của HTTP, API và 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 giao thức HTTP tiêu chuẩn, giống như một trang web. 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 giao trạng thái đại diện (REST), có lẽ là phong cách kiến ​​trúc 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) is a web service that grants access to specific data and methods that other applications can access – and sometimes edit – via standard HTTP protocols, just like a website. This simplicity makes it easy to quickly integrate APIs into a wide variety of applications. REpresentational State Transfer (REST), is probably the most popular architectural style of APIs for web services. It consists of a set of guidelines designed to simplify client / server communication. REST APIs make data access much more straightforward and logical.

Yêu cầu

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 định 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ể, URL điểm cuối được gắn với một tài nguyên cụ thể trong API. – The URL that delineates what data you are interacting with. Similar to how a web page URL is tied to a specific page, an endpoint URL is tied to a specific resource within an 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: – Specifies how you’re interacting with the resource located at the provided endpoint. REST APIs can provide methods to enable full Create, Read, Update, and Delete (CRUD) functionality. Here are common methods most REST APIs provide:

  • Nhận - Lấy dữ liệu
  • Đặt - thay thế dữ liệu
  • Đăng - Tạo dữ liệu
  • Xóa - 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 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. – If you’re using a method that involves changing data in a REST API, you’ll need to include a data payload with the request that includes all data that will be created or modified.

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, chẳng hạn như mã thông báo xác thực, loại nội dung nên được trả về và bất kỳ chính sách đệm nào. – Contain any metadata that needs to be included with the request, such as authentication tokens, the content type that should be returned, and any caching policies.

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. Đây có thể là bất kỳ loại dữ liệu nào, vì nó 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ở. Đâ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 "http://api.open-notify.org/astros.json"

Bạn sẽ thấy một 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 một chuyến đi lịch sử đến Trạm vũ trụ quốc tế:historic trip to the International Space Station:

{
  "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

Bây giờ, 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 sẽ cần phải có phần mềm cần thiết; Hãy chắc chắn rằng bạn đã cài đặt Python và Pip trên máy của bạn. Sau đó, đi đến dòng lệnh và cài đặt mô -đun yêu cầu Python với PIP:Python and pip installed on your machine. Then, head over to the command line and install the python requests module with 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 đảm bảo bạn nhập thư viện yêu cầu vào bất kỳ tập lệnh nào bạn muốn sử dụng trong:

import requests

Cách dữ liệu yêu cầu với GET

Phương thức GET được sử dụng để truy cập dữ liệu cho một tài nguyên cụ thể từ API REST; Yêu cầu Python bao gồm một chức năng để thực hiện chính xác điều này.

import requests
response = requests.get("http://api.open-notify.org/astros.json")
print(response)
>>>> Response<200>

Đối tượng phản hồi chứa tất cả dữ liệu được gửi từ máy chủ để đáp ứng với yêu cầu GET của bạn, bao gồm các tiêu đề và tải trọng dữ liệu. Khi ví dụ mã này in đối tượng 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). (more on status codes later).

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 chính yêu cầu, có thể được truy cập 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 điểm cuối. Với các yêu cầu Python, điều này được xử lý thông qua đối số PARAMS, chấp nhận một đối tượng từ điển; Hãy để xem những gì trông giống như khi chúng tôi sử dụng API thông báo mở để có được ước tính khi nào ISS sẽ bay qua một điểm được chỉ định:

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

Lệnh in sẽ trả về một cái gì đó trô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 để thêm dữ liệu được liên kết cho các yêu cầu phương thức đặt và đăng.

# Create a new resource
response = requests.post('https://httpbin.org/post', data = {'key':'value'})

# Update an existing resource
requests.put('https://httpbin.org/put', data = {'key':'value'})

Cách truy cập các tiêu đề nghỉ ngơi

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

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

Đối với các API mở, bao gồm những điều cơ bản. Tuy nhiên, nhiều API có thể được sử dụng bởi bất cứ 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à don lồ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 thực 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 nhạy cảm. & NBSP;

Có một vài phương thức xác thực 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 tên người dùng và mật khẩu của bạn đến điểm cuối thích hợp dưới dạng http basic auth; Điều này tương đương với việc gõ tên người dùng và mật khẩu của bạn vào một trang web.

{
  "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ó được mã thông báo truy cập hoạt động như tương đương với kết hợp tên người dùng/mật khẩu; Phương pháp để có được mã thông báo truy cập khác nhau từ API đến API, nhưng khung phổ biến nhất để xác thực API là 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 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ể có thể được truy cập. Quá trình này được thể hiện trong dịch vụ Auth được lưu trữ nylas.OAuth. Here at Nylas, we use three-legged OAuth to grant an access token for user accounts that is restricted to scopes that define the specific data and functionality that can be accessed. This process is demonstrated in the Nylas Hosted Auth service.

Hướng dẫn can you use rest api with python? - bạn có thể sử dụng api nghỉ với python không?

Khi bạn có mã thông báo truy cập, bạn có thể cung cấp 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 cho 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 các quyết định kiến ​​trúc của nhà sản xuất API REST.digest, Kerberos, NTLM, and AuthBase. The use of these depends on the architecture decisions of the REST API producer.

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

Các đối tượng phiên có í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, như mã thông báo truy cập. Ngoài ra, quản lý cookie phiên có thể cung cấp một sự gia 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. come in handy when working with Python Requests as a tool to persist parameters that are needed for making multiple requests within a single session, like access tokens. Also, managing session cookies can provide a nice performance increase because you don’t need to open a new connection for every request.

{
  "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ý các lỗi HTTP với các yêu cầu Python

Các cuộc gọi API don luôn luôn đi theo kế hoạch và có vô số lý do tại sao các yêu cầu API 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à họ xuất ra 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 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 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 mã trạng thái rơi vào một trong 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 cho tải trọng dữ liệu. Bạn có thể đã thắng cần phải lo lắng về 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ể cần 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 các tài nguyên không tồn tại. Điều này thường chỉ ra các lỗi cấu hình trên ứng dụng máy khách.
  • Lỗi máy chủ 5xx - Cho biết sự cố với 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 các 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 điểm cuối URL, API sẽ trả về mã trạng thái 404.

Nếu bạn muốn các 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 lỗi cụ thể bằng cách sử dụng các yêu cầu tích hợp tích hợp. Ví dụ tiếp theo này hoàn thành điều tương tự như ví dụ mã trước đó. (4xx and 5xx), you can use the raise_for_status() function and catch specific errors using Requests built-in exceptions. This next example accomplishes the same thing as the previous code example.

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

TooManyRedirects 

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 tình huống mà bạn kết thúc với một vòng lặp 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 chuyển 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

Lỗi kết nối

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ủ? Lỗi kết nối có thể xảy ra vì nhiều lý do khác nhau, bao gồm lỗi DNS, kết nối từ chối, các vấn đề kết nối Internet hoặc độ trễ ở đâu đó trong mạng. Các yêu cầu Python cung cấp ngoại lệ ConnectionError cho biết khi nào máy khách của bạn không thể kết nối với máy chủ. & NBSP;

{
  "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 kịch bản 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 kịch bản 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.

Timeout 

Lỗi thời gian chờ xảy ra khi bạn có thể kết nối với máy chủ API, 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ờ: & NBSP; & NBSP;

{
  "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ệ 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 tập 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ỉ 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; ngăn mã của bạn dừng trong khi chờ đợi các phản hồi lớn hơn.

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

& nbsp; Như chúng tôi đã thấy, mô -đun yêu cầu xử lý các lỗi yêu cầu API chung bằng cách sử dụng & nbsp; xử lý ngoại lệ trong Python. 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, 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 nay, xin chúc mừng! Bạn có thể đang trên đường trở thành một trình hướng dẫn yêu cầu Python mà không có API nghỉ ngơi nào là một trận đấu quá tuyệt vời. Bạn muốn tiếp tục học hỏi? Chúng tôi có hàng tấn chuyên gia Python có kiến ​​thức ở đây tại NYLAS và chúng tôi có nội dung chuyên sâu trên blog của chúng tôi về việc đóng gói và triển khai mã Python để sản xuất và sử dụng các biến môi trường để làm cho mã Python của bạn an toàn hơn.packaging and deploying Python code to production, and using environment variables to make your Python code more secure.

Làm thế nào để Python thực hiện API REST?

Làm thế nào để tạo API RESTful bằng Python và bình..
Nhận tất cả các ngôn ngữ lập trình được lưu trữ trong API ..
Nhận một thể hiện cụ thể của ngôn ngữ lập trình ..
Lọc tài nguyên ngôn ngữ lập trình dựa trên trường Năm xuất bản ..
Đăng, đặt và xóa một thể hiện ngôn ngữ lập trình ..

Tôi có thể xây dựng một API với Python không?

Có nhiều cách khác nhau để tạo API trong Python, được sử dụng nhiều nhất là fastapi và bình.FastAPI and Flask.