Mã thông báo api python

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 đăng này, chúng tôi sẽ xem xét một trong những mô-đun Python được sử dụng rộng rãi nhất để tương tác với các dịch vụ dựa trên web, chẳng hạn như API REST, mô-đun Python

import requests
01. Nếu bạn từng thắc mắc điều kỳ diệu nào đang xảy ra đằng sau hậu trường khi chạy một trong hàng nghìn mô-đun mạng Ansible hoặc nhiều SDK dựa trên Python có sẵn từ các nhà cung cấp, thì rất có thể các hoạt động cơ bản đang được thực hiện bởi
import requests
01. Mô-đun Python
import requests
01 là một tiện ích mô phỏng hoạt động của trình duyệt web bằng mã. Nó cho phép các chương trình tương tác với một dịch vụ dựa trên web trên toàn mạng, đồng thời trừu tượng hóa và xử lý các chi tiết cấp thấp hơn của việc mở kết nối TCP tới hệ thống từ xa. Giống như trình duyệt web, mô-đun
import requests
01 cho phép bạn lập trình

  • Bắt đầu các yêu cầu HTTP như GET, PUT, POST, PATCH và DELETE
  • Đặt các tiêu đề HTTP sẽ được sử dụng trong yêu cầu gửi đi
  • Lưu trữ và truy cập nội dung máy chủ web ở nhiều dạng khác nhau [HTML, XML, JSON, v.v. ]
  • Lưu trữ và truy cập cookie
  • Sử dụng HTTP hoặc HTTPS

Truy xuất dữ liệu

Ví dụ cơ bản nhất về việc sử dụng yêu cầu chỉ đơn giản là truy xuất nội dung của trang web bằng HTTP GET

import requests
4

Đối tượng

import requests
05 kết quả sẽ chứa mã HTML thực tế mà trình duyệt sẽ nhìn thấy trong đối tượng
import requests
06, có thể được truy cập bằng cách nhập
import requests
07

import requests
8

Có rất nhiều tiện ích tuyệt vời để phân tích cú pháp HTML, nhưng trong hầu hết các trường hợp, chúng tôi sẽ không làm điều đó khi làm việc với API của nhà cung cấp mạng. Trong phần lớn các trường hợp, dữ liệu sẽ trở lại có cấu trúc dưới dạng XML hoặc JSON

import requests
0

Lưu ý rằng đầu ra ở trên có định dạng

import requests
08. Điều này được biểu thị bằng chữ thường “b” trước văn bản phản hồi. Chúng tôi có thể chuyển đổi chuỗi này thành một chuỗi bằng cách sử dụng
import requests
09 và sau đó sử dụng mô-đun Python
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
20 để tải nó vào từ điển Python. Tuy nhiên, vì
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
20 là một trong những định dạng dữ liệu phổ biến nhất nên mô-đun
import requests
01 có một phương thức tiện lợi sẽ tự động chuyển đổi phản hồi từ byte sang từ điển Python. Đơn giản chỉ cần gọi
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
23

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

Trong một số trường hợp, chúng tôi sẽ phải chỉ định định dạng dữ liệu mong muốn bằng cách đặt tiêu đề

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

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

Trong ví dụ này, chúng tôi đang thông báo cho API rằng chúng tôi muốn dữ liệu quay lại được định dạng dưới dạng JSON. Nếu API cung cấp nội dung dưới dạng XML, chúng tôi sẽ chỉ định tiêu đề là

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
25. Loại nội dung phù hợp để yêu cầu phải được nêu rõ trong tài liệu API của nhà cung cấp. Nhiều API sử dụng giá trị mặc định, vì vậy bạn có thể không cần chỉ định tiêu đề. Nautobot tình cờ sử dụng giá trị mặc định là
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
26, vì vậy không cần thiết phải đặt tiêu đề. Nếu bạn không đặt tiêu đề
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
24, bạn có thể tìm ra loại nội dung được trả về bằng cách kiểm tra tiêu đề
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
28 trong phản hồi

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
3

Mặc dù chúng tôi đang sử dụng Nautobot cho nhiều ví dụ về cách sử dụng mô-đun

import requests
01, nhưng có một SDK rất hữu ích có tên là pynautobot có thể xử lý nhiều công việc nặng nhọc cho bạn, vì vậy hãy chắc chắn kiểm tra nó

xác thực

Hầu hết các API được bảo vệ bởi cơ chế xác thực có thể khác nhau giữa các sản phẩm. Tài liệu API là tài nguyên tốt nhất của bạn trong việc xác định phương thức xác thực đang sử dụng. Chúng tôi sẽ xem xét một số phương pháp phổ biến hơn với các ví dụ bên dưới

Mã API

Với xác thực khóa API, trước tiên bạn phải truy cập cổng quản trị và tạo khóa API. Hãy nghĩ về khóa API giống như cách bạn nghĩ về tên người dùng/mật khẩu quản trị của mình. Trong một số trường hợp, nó sẽ cung cấp quyền truy cập quản trị đọc/ghi cho toàn bộ hệ thống, vì vậy bạn muốn bảo vệ nó như vậy. Điều này có nghĩa là không lưu trữ nó trong mã hoặc trong kho lưu trữ

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
80 nơi có thể nhìn thấy nó ở dạng văn bản rõ ràng. Thông thường, các khóa API được lưu trữ dưới dạng biến môi trường và được nhập vào thời gian chạy hoặc được nhập từ kho mật khẩu như Hashicorp hoặc Ansible vault. Sau khi khóa API được tạo, nó sẽ cần được đưa vào theo một cách nào đó với tất cả các yêu cầu. Tiếp theo, chúng tôi sẽ mô tả một số phương pháp phổ biến để đưa khóa API vào yêu cầu và cung cấp mã ví dụ

Mã thông báo trong Tiêu đề ủy quyền

Một phương pháp được sử dụng trên nhiều loại API là bao gồm khóa API dưới dạng mã thông báo trong tiêu đề

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
81. Một vài ví dụ về điều này là trong các phương thức xác thực cho Nautobot và Cisco Webex. Hai ví dụ dưới đây rất giống nhau, với sự khác biệt chính là Nautobot sử dụng
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
82 trong tiêu đề
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
81 trong khi Cisco Webex sử dụng
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
84 trong tiêu đề
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
81. Việc triển khai điều này không được chuẩn hóa, vì vậy tài liệu API phải chỉ ra định dạng của tiêu đề sẽ là gì

API Nautobot

Đầu tiên, cần tạo khóa API từ Nautobot GUI. Đăng nhập vào Nautobot và chọn tên người dùng của bạn ở góc trên bên phải, sau đó xem Hồ sơ của bạn. Từ chế độ xem Hồ sơ, chọn Mã thông báo API và nhấp vào nút để thêm mã thông báo. Sau đó, mã thông báo sẽ cần được chỉ định trong tiêu đề

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
81 trong tất cả các yêu cầu như được hiển thị bên dưới

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

API Webex của Cisco

Khi làm việc với API Webex, phải tạo bot để lấy khóa API. Đầu tiên tạo một bot trong bảng điều khiển https. // nhà phát triển. webex. com/docs/. Khi tạo bot, bạn được cung cấp mã thông báo có giá trị sử dụng trong 100 năm. Sau đó, mã thông báo sẽ được đưa vào tiêu đề

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
81 trong tất cả các yêu cầu như được hiển thị bên dưới

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

Tiêu đề mã thông báo tùy chỉnh

Một số API yêu cầu cung cấp khóa API trong tiêu đề tùy chỉnh được bao gồm trong tất cả các yêu cầu. Khóa và định dạng sử dụng cho giá trị phải được nêu rõ trong tài liệu API

Cisco Meraki

Cisco Meraki yêu cầu tất cả các yêu cầu phải có tiêu đề

import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
88 với khóa API làm giá trị.
Giống như phương pháp Mã thông báo trong Tiêu đề ủy quyền đã thảo luận trước đây, trước tiên bạn phải truy cập bảng điều khiển API và tạo khóa API. Điều này được thực hiện trong Bảng điều khiển Meraki trong cài đặt hồ sơ của bạn. Sau đó, khóa phải được chỉ định trong
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
88 cho tất cả các yêu cầu.

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

Xác thực cơ bản HTTP w/Mã thông báo

Một số API yêu cầu trước tiên bạn phải gửi HTTP POST cho url đăng nhập bằng Xác thực cơ bản HTTP. Sau đó, một mã thông báo phải được sử dụng cho các yêu cầu tiếp theo sẽ được cấp trong phản hồi. Loại xác thực này không yêu cầu phải truy cập cổng quản trị trước để tạo mã thông báo;

Xác thực cơ bản HTTP/Mã thông báo - Trung tâm DNA của Cisco

Quy trình đăng nhập Trung tâm DNA của Cisco yêu cầu trước tiên, một yêu cầu phải được gửi tới một URL đăng nhập bằng Xác thực cơ bản HTTP và sau khi xác thực thành công, sẽ phát hành một mã thông báo trong phản hồi. Sau đó, mã thông báo phải được gửi trong tiêu đề

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
30 trong các yêu cầu tiếp theo

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

POST với Tải trọng JSON

Với phương pháp xác thực này, trước tiên người dùng phải gửi POST tới URL đăng nhập và bao gồm JSON [phổ biến nhất], XML hoặc loại tải trọng khác có chứa thông tin đăng nhập của người dùng. Sau đó, một mã thông báo phải được sử dụng với các yêu cầu API tiếp theo sẽ được trả lại. Trong một số trường hợp, mã thông báo được trả lại dưới dạng cookie trong phản hồi. Trong trường hợp đó, một lối tắt là sử dụng một đối tượng

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
31. Bằng cách sử dụng đối tượng
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
32, mã thông báo trong cookie có thể dễ dàng được sử dụng lại cho các yêu cầu tiếp theo bằng cách tìm nguồn yêu cầu từ đối tượng
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
32. Đây là chiến lược được sử dụng trong ví dụ ACI của Cisco bên dưới

POST với Tải trọng JSON - Cisco ACI

Cisco ACI yêu cầu tải trọng JSON được đăng lên điểm cuối URL

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
34 có bao gồm tên người dùng/mật khẩu. Phản hồi bao gồm một cookie có khóa
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
35 và một mã thông báo trong giá trị có thể được sử dụng cho các yêu cầu tiếp theo

import requests
80

Kiểm tra chứng chỉ

Lưu ý

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
36 trong ví dụ trên. Điều này có thể được sử dụng để tắt kiểm tra chứng chỉ khi thiết bị hoặc API bạn đang nhắm mục tiêu đang sử dụng chứng chỉ SSL tự ký hoặc không hợp lệ. Điều này sẽ tạo ra một thông báo tường trình tương tự như sau

Yêu cầu không an toànCảnh báo. Yêu cầu HTTPS chưa được xác minh đang được gửi tới máy chủ ‘sandboxapicdc. cisco. com’. Thêm xác minh chứng chỉ được khuyến khích mạnh mẽ. Nhìn thấy. https. // urllib3. đọcthedocs. io/vi/mới nhất/cách sử dụng nâng cao. html#ssl-cảnh báo`

Giải pháp nên được sử dụng để triển khai sản xuất là cài đặt chứng chỉ SSL hợp lệ và không sử dụng

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
36. Tuy nhiên, nếu bạn đang xử lý các thiết bị phòng thí nghiệm có thể không bao giờ có chứng chỉ hợp lệ thì có thể tắt thông báo bằng đoạn mã sau

import requests
81

Xử lý lỗi

Sẽ rất hữu ích khi làm việc với

import requests
01 để hiểu mã trạng thái HTTP và một số trình kích hoạt phổ biến đối với chúng khi làm việc với API. Mã trạng thái HTTP cho biết yêu cầu thành công hay thất bại và khi xảy ra lỗi, có thể đưa ra gợi ý về vấn đề có thể xảy ra. Dưới đây là một số mã trạng thái HTTP phổ biến mà bạn có thể thấy khi làm việc với API và các nguyên nhân tiềm ẩn

200 được. Yêu cầu đã thành công

201 đã tạo. Cho biết yêu cầu POST hoặc PUT đã thành công

204 Đã xóa. Cho biết một yêu cầu XÓA thành công

400 yêu cầu sai. Thường cho biết có sự cố với tải trọng trong trường hợp yêu cầu POST, PUT hoặc PATCH

401 trái phép. Thông tin đăng nhập không hợp lệ hoặc bị thiếu

403 cấm. Người dùng được xác thực không có quyền đối với tài nguyên được yêu cầu

404 không tìm thấy. URL không được công nhận

429 Yêu cầu quá nhiều. API có thể có hiệu lực giới hạn tốc độ. Kiểm tra tài liệu API để xem có giới hạn về số lượng yêu cầu mỗi giây hoặc mỗi phút không

500 Lỗi máy chủ nội bộ. Máy chủ gặp lỗi khi xử lý yêu cầu của bạn. Giống như 400, điều này cũng có thể do tải trọng không tốt trên POST, PUT hoặc PATCH

Khi mô-đun

import requests
01 nhận được các mã trạng thái trên trong phản hồi, nó sẽ trả về một đối tượng phản hồi và điền các trường
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
20 và
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
21 vào đối tượng phản hồi. Nếu xảy ra lỗi kết nối, chẳng hạn như tên máy chủ không thể truy cập hoặc không thể giải quyết, thì
import requests
01 sẽ đưa ra một ngoại lệ. Tuy nhiên, theo mặc định,
import requests
01 sẽ không ném ngoại lệ đối với các lỗi dựa trên HTTP, chẳng hạn như lỗi 4XX và 5XX ở trên. Thay vào đó, nó sẽ trả về mã trạng thái lỗi và lý do trong phản hồi. Một chiến lược phổ biến trong việc xử lý lỗi là sử dụng phương thức
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
24 của đối tượng phản hồi để đưa ra một ngoại lệ cho các lỗi dựa trên HTTP. Sau đó, một khối Python
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
25 có thể được sử dụng để bắt bất kỳ lỗi nào và cung cấp thông báo lỗi thân thiện với con người hơn cho người dùng, nếu muốn

Lưu ý rằng mã trạng thái HTTP trong phạm vi 2XX biểu thị thành công và do đó,

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
24 sẽ không đưa ra ngoại lệ

import requests
82

Đối tượng API CRUD [Tạo, Thay thế, Cập nhật, Xóa]

Cho đến nay, chúng ta đã thảo luận chủ yếu về việc truy xuất dữ liệu từ API bằng cách sử dụng các yêu cầu HTTP GET. Khi tạo/cập nhật đối tượng, HTTP POST, PUT và PATCH được sử dụng. Một yêu cầu XÓA sẽ được sử dụng để xóa các đối tượng khỏi API

  • BƯU KIỆN. Dùng khi tạo đối tượng mới
  • VÁ. Cập nhật thuộc tính của đối tượng
  • ĐẶT. Thay thế một đối tượng bằng một đối tượng mới
  • XÓA BỎ. Xóa một đối tượng

Cần lưu ý rằng một số API hỗ trợ cả PUT và PATCH, trong khi một số API khác có thể chỉ hỗ trợ PUT hoặc chỉ PATCH. API Meraki mà chúng tôi sẽ sử dụng cho ví dụ sau chỉ hỗ trợ các yêu cầu PUT để thay đổi đối tượng

BƯU KIỆN

Khi sử dụng yêu cầu POST với API, thông thường bạn phải gửi tải trọng cùng với yêu cầu theo định dạng mà API yêu cầu [thường là JSON, đôi khi là XML, rất hiếm khi là định dạng khác]. Định dạng cần thiết cho tải trọng phải được ghi lại trong đặc tả API. Khi sử dụng định dạng

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
27, bạn có thể chỉ định đối số
import requests
response = requests.get["//api.open-notify.org/astros.json"]
print[response]
>>>> Response
20 khi thực hiện lệnh gọi tới
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
29. Ví dụ:
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
40. Các loại tải trọng khác, chẳng hạn như
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
41 sẽ sử dụng đối số
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
42. Ví dụ,
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
43

Tạo Vùng trong Nautobot

Với Nautobot, chúng tôi có thể xác định tải trọng cần thiết bằng cách xem tài liệu Swagger có trên chính hệ thống tại

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
44. Hãy cùng xem thông số Swagger để tạo một
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
45 trong Nautobot

Các trường được đánh dấu * màu đỏ ở trên cho biết đó là các trường bắt buộc, các trường khác là tùy chọn. Nếu chúng tôi nhấp vào nút Dùng thử như hình trên, nó sẽ cung cấp cho chúng tôi tải trọng mẫu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
46 và
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
47 là các trường bắt buộc duy nhất, chúng tôi có thể tạo một tải trọng từ ví dụ bỏ qua các trường khác nếu muốn. Đoạn mã dưới đây cho thấy cách chúng tôi có thể tạo Khu vực trong Nautobot bằng cách sử dụng
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
29

import requests
83

Một yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
49 có thể được sử dụng để cập nhật một thuộc tính của một đối tượng. Ví dụ: trong đoạn mã tiếp theo này, chúng tôi sẽ thay đổi mô tả của Khu vực mà chúng tôi vừa tạo trong yêu cầu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
70. Nó đã bị bỏ qua trong yêu cầu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
70 trước đó nên hiện tại nó là một chuỗi trống. Mặc dù nó không được gọi ra trong đặc tả API Swagger, yêu cầu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
49 cho Nautobot yêu cầu trường
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
73 được xác định trong tải trọng. Có thể tra cứu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
73 cho Khu vực đã tạo trước đây của chúng tôi bằng cách thực hiện
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
75 trên
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
76.
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
77 ở cuối URL là một tham số truy vấn được sử dụng để lọc yêu cầu đối với các đối tượng có trường khớp với một giá trị cụ thể. Trong trường hợp này, chúng tôi đã lọc các đối tượng cho đối tượng có trường
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
47 được đặt thành
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
79 để lấy ID. Ngoài ra, tải trọng phải ở dạng danh sách từ điển chứ không phải là một từ điển đơn lẻ như trong ví dụ về Swagger

Cập nhật Mô tả Khu vực trong Nautobot

import requests
84

ĐẶT

Yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
90 thường được sử dụng để thay thế toàn bộ đối tượng bao gồm tất cả các thuộc tính của đối tượng

Thay thế đối tượng vùng trong Nautobot

Giả sử chúng ta muốn thay thế toàn bộ đối tượng Vùng mà chúng ta đã tạo trước đó, đặt cho nó một tên, sên và mô tả hoàn toàn mới. Đối với điều này, chúng tôi có thể sử dụng yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
90, chỉ định
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
73 của Khu vực đã tạo trước đó và cung cấp các giá trị mới cho các thuộc tính tên, sên và mô tả

import requests
85

Kích hoạt SSID trong Meraki

Hãy xem một ví dụ khác về việc sử dụng

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
90 để kích hoạt SSID không dây trong bảng điều khiển Cisco Meraki. Đối với điều này, chúng tôi sẽ sử dụng yêu cầu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
90 bao gồm tải trọng JSON thích hợp để bật SSID 14

import requests
86

XÓA BỎ

Có thể xóa một đối tượng bằng cách thực hiện yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
95 tới URI [Chỉ báo tài nguyên chung] của một đối tượng. URI là một phần của URL đề cập đến đối tượng, ví dụ:
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
96 trong trường hợp Vùng Nautobot

Xóa Vùng khỏi Nautobot

Hãy tiếp tục và xóa Khu vực mà chúng tôi đã thêm trước đó. Để làm điều đó, chúng tôi sẽ gửi yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
95 tới URI của khu vực. Có thể nhìn thấy URI khi thực hiện yêu cầu
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
98 trong thuộc tính
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
99 của đối tượng Khu vực. Chúng ta cũng có thể thấy trong đặc tả API cho
query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
95 rằng lệnh gọi phải được thực hiện tới
import requests
801

import requests
87

Giới hạn tỷ lệ

Một số API triển khai cơ chế điều chỉnh để ngăn hệ thống bị quá tải với các yêu cầu. Điều này thường được triển khai dưới dạng giới hạn tốc độ của X số lượng yêu cầu mỗi phút. Khi đạt đến giới hạn tốc độ, API sẽ trả về mã trạng thái

import requests
802. Để giải quyết vấn đề này, mã của bạn phải triển khai bộ đếm thời gian dự phòng để tránh chạm ngưỡng. Dưới đây là một ví dụ về giới hạn tốc độ của Trung tâm DNA của Cisco là 5 yêu cầu mỗi phút

import requests
88

phân trang

Một số lệnh gọi API có thể đặt giới hạn về số lượng đối tượng được trả về trong một lệnh gọi. Trong trường hợp này, API sẽ trả về chi tiết phân trang trong nội dung JSON, bao gồm cả URL để yêu cầu tập hợp dữ liệu tiếp theo cũng như tập hợp trước đó. Nếu Trước đó trống, chúng tôi đang ở tập dữ liệu đầu tiên. Nếu Tiếp theo trống, chúng tôi biết rằng chúng tôi đã đến cuối tập dữ liệu. Một số triển khai API tuân theo RFC5988, bao gồm tiêu đề Liên kết ở định dạng

liên kết. https. //webexapis. com/v1/people?displayName=Harold&max=10&before&after=Y2lzY29zcGFyazovL3VzL1BFT1BMRS83MTZlOWQxYy1jYTQ0LTRmZWQtOGZjYS05ZGY0YjRmNDE3ZjU;

Ví dụ trên là từ API Webex, triển khai RFC5988. Điều này được mô tả trong tài liệu API tại đây. https. // nhà phát triển. webex. com/docs/api/cơ bản

Tuy nhiên, hãy nhớ rằng không phải tất cả các triển khai đều sử dụng RFC. Tài liệu API sẽ giải thích cách xử lý phân trang

Xử lý phân trang trong Nautobot

Có thể thấy một ví dụ điển hình về phân trang khi thực hiện yêu cầu

query = {'lat':'45', 'lon':'180'}
response = requests.get['//api.open-notify.org/iss-pass.json', params=query]
print[response.json[]]
98 để truy xuất tất cả Thiết bị từ Nautobot. Nautobot bao gồm thuộc tính
import requests
804,
import requests
805 và
import requests
806 trong các phản hồi được phân trang. Theo mặc định, API sẽ trả về tối đa 50 bản ghi. Giá trị giới hạn cũng như giá trị bù được chỉ định trong giá trị
import requests
805 của phản hồi. Ví dụ.
import requests
808. Trong URL, giới hạn cho biết số lượng bản ghi tối đa và phần bù cho biết vị trí bắt đầu của loạt bản ghi tiếp theo. Thuộc tính
import requests
806 cho biết url của tập bản ghi trước đó. Nếu
import requests
806 là Không, điều đó có nghĩa là chúng tôi đang ở trong nhóm hồ sơ đầu tiên. Và nếu
import requests
805 là Không, điều đó có nghĩa là chúng tôi đang ở trong nhóm hồ sơ cuối cùng

Trong đoạn mã dưới đây, trước tiên chúng tôi truy xuất bộ 50 bản ghi đầu tiên và lưu trữ chúng trong một biến

import requests
812. Sau đó, chúng tôi tạo một vòng lặp
import requests
813 lặp lại cho đến khi trường
import requests
805 trong phản hồi chứa Không có. Các kết quả trả về được thêm vào
import requests
812 ở mỗi lần lặp lại vòng lặp. Cuối cùng, chúng ta có thể thấy rằng có 511 thiết bị, có cùng giá trị với trường
import requests
804 trong phản hồi

import requests
89

Xử lý phân trang trong Cisco Webex

Trong mã bên dưới, trước tiên, chúng tôi lấy ID phòng cho các phòng Nhóm WebEx mà tôi là thành viên. Sau đó, chúng tôi truy xuất các thành viên từ phòng Câu hỏi hỗ trợ dành cho nhà phát triển DevNet và tạo một chức năng liên tục theo URL liên kết và hiển thị nội dung. Vòng lặp While bị hỏng khi tiêu đề Liên kết không còn nữa, trả về Không có khi chúng tôi cố truy xuất nó bằng tiêu đề. nhận được liên kết']

import requests
00

kết thúc

Tôi hy vọng đây là một hướng dẫn hữu ích về cách sử dụng

import requests
01 để làm việc với API REST của nhà cung cấp. Mặc dù không có hai cách triển khai API nào giống nhau, nhưng nhiều mẫu phổ biến nhất để làm việc với chúng được đề cập ở đây. Như mọi khi, hãy liên hệ với chúng tôi trong các nhận xét hoặc trên kênh Slack công khai của chúng tôi nếu có bất kỳ câu hỏi nào. Cảm ơn vì đã đọc

Làm cách nào để nhận mã thông báo API bằng Python?

Nhận mã thông báo API . Trong nội dung bài đăng, tên người dùng và mật khẩu được chỉ định ở định dạng JSON và nội dung phản hồi chứa khóa mã thông báo với Mã thông báo API thực tế làm giá trị. an HTTP POST request should be sent to the Token resource. In the post body, username and password are specified in JSON format, and the response body contains a token key with an actual API Token as the value.

Làm cách nào để tạo mã thông báo bằng Python?

Gọi phương thức generate_token[] trả về một chuỗi. Chuỗi này là mã thông báo. Phương thức nhận các đối số sau. session_id [String] — ID phiên tương ứng với phiên mà người dùng sẽ kết nối.

Làm cách nào để gọi API bằng mã thông báo?

Ủy quyền .
Bước 1. Tạo liên kết yêu cầu ủy quyền
Bước 2. Yêu cầu người dùng cấp quyền
Bước 3. Trao đổi mã ủy quyền với tokenpost truy cập
Bước 4. Sử dụng mã thông báo truy cập cho các yêu cầu API REST
Bước 5. Nhận mã thông báo truy cập mới bằng cách sử dụng mã thông báo làm mới

Mã thông báo xác thực trong Python là gì?

Đó là mã thông báo xác thực mà máy chủ sử dụng để xác minh rằng bạn được phép truy cập vào API . Bạn cần lấy thông tin đăng nhập của ứng dụng khách [tên người dùng, mật khẩu, khóa API] cho API bạn muốn truy cập, sau đó gửi chúng [ví dụ: thông qua yêu cầu nhận] đến máy chủ xác thực.

Chủ Đề