Yêu cầu API trong Python

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 như API REST, mô-đun Python

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1. Nếu bạn từng thắc mắc điều kỳ diệu nào đang diễn 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1. Mô-đun Python
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 là một tiện ích mô phỏng các 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 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
response = requests.get['//google.com']

Đối tượng

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

5 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

6, có thể được truy cập bằng cách nhập
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

7

________số 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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

8. Đ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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

9 và sau đó sử dụng mô-đun Python
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

20 để tải nó vào từ điển Python. Tuy nhiên, vì
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

20 là một trong những định dạng dữ liệu phổ biến nhất nên mô-đun
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

23

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

24. Ví dụ

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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à

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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à
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

26, vì vậy không cần thiết phải đặt tiêu đề. Nếu bạn không đặt tiêu đề
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

28 trong phản hồi

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1, 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ữ

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

82 trong tiêu đề
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

81 trong khi Cisco Webex sử dụng
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

84 trong tiêu đề
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

81 trong tất cả các yêu cầu như được hiển thị bên dưới

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

81 trong tất cả các yêu cầu như được hiển thị bên dưới

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đề

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

88 với khóa API làm giá trị.
Giống như phương pháp đã 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

88 cho tất cả các yêu cầu.

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

30 trong các yêu cầu tiếp theo

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

31. Bằng cách sử dụng đối tượng
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

>>> response.text
'
-- output omitted for brevity --
0

Kiểm tra chứng chỉ

Lưu ý

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

>>> response.text
'
-- output omitted for brevity --
1

Xử lý lỗi

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 để 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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 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 vào các trường
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

20 và
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

21 trong đố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ì
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 sẽ đưa ra một ngoại lệ. Tuy nhiên, theo mặc định,
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 đó,

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

24 sẽ không đưa ra ngoại lệ

>>> response.text
'
-- output omitted for brevity --
2

Đố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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

27, bạn có thể chỉ định đối số
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

20 khi thực hiện lệnh gọi tới
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

29. Ví dụ,
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

40. Các loại tải trọng khác, chẳng hạn như
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

41 sẽ sử dụng đối số
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

42. Ví dụ,
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

44. Hãy xem thông số Swagger để tạo một
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

46 và
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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 ta có thể tạo Khu vực trong Nautobot bằng cách sử dụng
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

29

>>> response.text
'
-- output omitted for brevity --
3

Một yêu cầu

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

70. Nó đã bị bỏ qua trong yêu cầu
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

49 cho Nautobot yêu cầu trường
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

73 được xác định trong tải trọng. Có thể tra cứu
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

73 cho Khu vực đã tạo trước đây của chúng tôi bằng cách thực hiện
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

75 trên
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

76.
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

47 được đặt thành
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

>>> response.text
'
-- output omitted for brevity --
4

ĐẶT

Yêu cầu

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

90, chỉ định
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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ả

>>> response.text
'
-- output omitted for brevity --
5

Kích hoạt SSID trong Meraki

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

90 bao gồm tải trọng JSON thích hợp để bật SSID 14

>>> response.text
'
-- output omitted for brevity --
6

XÓA BỎ

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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ụ:
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

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
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

98 trong thuộc tính
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

99 của đối tượng Khu vực. Chúng ta cũng có thể thấy trong đặc tả API cho
response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

95 rằng lệnh gọi phải được thực hiện tới
>>> response.text
'
-- output omitted for brevity --
01

>>> response.text
'
-- output omitted for brevity --
7

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

>>> response.text
'
-- output omitted for brevity --
02. Để 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

>>> response.text
'
-- output omitted for brevity --
8

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

98 để truy xuất tất cả Thiết bị từ Nautobot. Nautobot bao gồm thuộc tính
>>> response.text
'
-- output omitted for brevity --
04,
>>> response.text
'
-- output omitted for brevity --
05 và
>>> response.text
'
-- output omitted for brevity --
06 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ị
>>> response.text
'
-- output omitted for brevity --
05 của phản hồi. Ví dụ.
>>> response.text
'
-- output omitted for brevity --
08. 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
>>> response.text
'
-- output omitted for brevity --
06 cho biết url của tập bản ghi trước đó. Nếu
>>> response.text
'
-- output omitted for brevity --
06 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
>>> response.text
'
-- output omitted for brevity --
05 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

>>> response.text
'
-- output omitted for brevity --
12. Sau đó, chúng tôi tạo một vòng lặp
>>> response.text
'
-- output omitted for brevity --
13 lặp lại cho đến khi trường
>>> response.text
'
-- output omitted for brevity --
05 trong phản hồi chứa Không có. Các kết quả trả về được thêm vào
>>> response.text
'
-- output omitted for brevity --
12 ở 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
>>> response.text
'
-- output omitted for brevity --
04 trong phản hồi

>>> response.text
'
-- output omitted for brevity --
9

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

0

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

response = requests.get['//nautobot.demo.networktocode.com/api']

>>> response.content
b'{"circuits":"//nautobot.demo.networktocode.com/api/circuits/","dcim":"//nautobot.demo.networktocode.com/api/dcim/","extras":"//nautobot.demo.networktocode.com/api/extras/","graphql":"//nautobot.demo.networktocode.com/api/graphql/","ipam":"//nautobot.demo.networktocode.com/api/ipam/","plugins":"//nautobot.demo.networktocode.com/api/plugins/","status":"//nautobot.demo.networktocode.com/api/status/","tenancy":"//nautobot.demo.networktocode.com/api/tenancy/","users":"//nautobot.demo.networktocode.com/api/users/","virtualization":"//nautobot.demo.networktocode.com/api/virtualization/"}'

1 để 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 để kết nối API với Python?

Các bước kết nối và gọi API bằng Python .
Nhập thư viện cần thiết. Để kết nối với API và thực hiện các hành động trên đó, chúng ta cần nhập thư viện yêu cầu Python vào môi trường. .
Thực hiện một hành động để kết nối với API. Ở đây, chúng tôi đã sử dụng lệnh GET để kết nối với API như hình–.
In mã phản hồi

Làm cách nào để tìm nạp API trong Python?

Các bước lấy dữ liệu từ API bằng Python .
Kết nối với một API. Lúc đầu, chúng tôi cần kết nối với API và tạo kết nối an toàn như hình bên dưới–.
Lấy dữ liệu từ API. .
Phân tích dữ liệu thành định dạng JSON. .
Trích xuất dữ liệu và in nó

Chúng ta có thể gọi API bằng Python không?

Để làm việc với API trong Python, chúng tôi cần các công cụ thực hiện các yêu cầu đó . Trong Python, thư viện phổ biến nhất để tạo yêu cầu và làm việc với API là thư viện yêu cầu. Thư viện yêu cầu không phải là một phần của thư viện Python tiêu chuẩn, vì vậy bạn sẽ cần cài đặt nó để bắt đầu.

API yêu cầu là gì?

Các yêu cầu API đã được xác định . Phương thức chỉ ra hành động bạn muốn API thực hiện. Dưới đây là một số phương pháp phổ biến nhất. GET lấy dữ liệu từ một API. POST gửi dữ liệu mới tới API. A request includes the URL of the API endpoint and an HTTP request method. The method indicates the action you want the API to perform. Here are some of the most common methods: GET retrieves data from an API. POST sends new data to an API.

Chủ Đề