Python kết nối với api như thế nào?

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 "http://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("http://api.open-notify.org/astros.json")
print(response)
>>>> Response<200>

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('http://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('https://httpbin.org/post', data = {'key':'value'})

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

print(response.headers["date"]) 
>>>> 'Wed, 11 June 2020 19:32:24 GMT'
requests.get(
  'https://api.github.com/user', 
  auth=HTTPBasicAuth('username', 'password')
)

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

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

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

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

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

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

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

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

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

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

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

Trong bài học này, chúng ta sẽ xem cách sử dụng Python để giao tiếp với Giao diện lập trình ứng dụng (API). API là một giao diện phần mềm cho phép các ứng dụng giao tiếp với các ứng dụng khác. Trong trường hợp của chúng tôi, chúng tôi sẽ giao tiếp với API bằng Python




Chúng tôi sẽ sử dụng mô-đun yêu cầu Python. Với mô-đun này, bạn có thể gửi tất cả các loại yêu cầu HTTP. Hãy cài đặt nó với PIP

import requests
0

Chúng tôi sẽ thử các API khác nhau để có thể kiểm tra những thứ khác nhau

  • API không cần xác thực. API đơn giản nhất để làm việc, thật tuyệt khi tìm hiểu những điều cơ bản
  • API có tham số truy vấn. chúng ta có thể sử dụng điều này để gửi tham số tới API
  • API có xác thực. hầu hết các API đều yêu cầu xác thực. Tôi sẽ chỉ cho bạn một ví dụ về cách xác thực bằng API

API không có xác thực

Khi bạn cố gắng giao tiếp với một API lần đầu tiên bằng Python, bạn muốn đảm bảo rằng bạn dùng thử một API dễ hiểu và có tài liệu phù hợp. Nếu có thể, API không nên có xác thực, do đó bạn không phải lo lắng về các phương thức xác thực như mã thông báo, khóa API, OAuth, v.v.

Một API như vậy là API Date Nager. Bạn có thể sử dụng API này để tìm nạp các ngày nghỉ lễ cho bất kỳ quốc gia và năm nào. Đó là một API đơn giản không yêu cầu xác thực và có tài liệu đàng hoàng

Đây là mã mẫu của tôi

Hãy để tôi giải thích đoạn mã trên

  • Chúng tôi sử dụng mô-đun yêu cầu để gửi yêu cầu HTTP GET tới
    • https. //ngày tháng. người quản lý. tại/api/v2/PublicHolidays/2020/US
  • API phản hồi với mã trạng thái HTTP 200 khi chúng tôi có thể kết nối
  • API trả về dữ liệu được yêu cầu ở định dạng JSON. Chúng tôi định dạng JSON thành một từ điển Python và lưu trữ nó trong "dữ liệu" biến
  • Khi API không thể tìm thấy nội dung được yêu cầu, nó sẽ trả về mã trạng thái HTTP 404
  • Khi API trả về bất kỳ mã trạng thái HTTP nào khác, chúng tôi biết đã xảy ra sự cố
  • Chúng tôi lặp lại từ điển của mình và in tất cả các khóa có tên tên

Xuất sắc. Bây giờ chúng tôi có một danh sách tất cả các ngày lễ của Hoa Kỳ vào năm 2020

Tham số truy vấn

Hãy tiếp tục với một ví dụ nâng cao hơn một chút. Lần này chúng tôi sử dụng API Datamuse. API này là một công cụ truy vấn tìm từ. Nó cho phép bạn gửi truy vấn để tìm các từ phù hợp với tiêu chí nhất định. Không phải thứ mà chúng tôi với tư cách là kỹ sư mạng có thể cần, nhưng đó là một cách tuyệt vời để kiểm tra các tham số truy vấn và Datamuse cung cấp tài liệu tốt

Ví dụ: giả sử tôi muốn tìm các từ có vần với từ “mạng”. Bạn có thể sử dụng URL sau cho việc này

https. //api. dữ liệu. com/words?rel_rhy=mạng

Hãy tiếp tục và mở liên kết ở trên trong trình duyệt web của bạn. Phần trong URL sau ?

Hãy xem liệu chúng ta có thể giao tiếp với API này bằng Python không

Đoạn mã trên rất giống với ví dụ đầu tiên của chúng tôi. Tôi sử dụng mô-đun yêu cầu để gửi yêu cầu HTTP GET tới URL. Đoạn mã trên hoạt động, nhưng chúng ta có thể cải thiện nó theo cách Pythonic hơn

Pythonic có nghĩa là bạn sử dụng mã tuân theo các phương pháp hay nhất dành cho Python và sử dụng nó theo cách mà nó dự định sẽ được sử dụng

Hãy thử một cái gì đó khác. Đây là mã của tôi

Trong đoạn mã trên, tôi đã tách URL khỏi tham số truy vấn. Bây giờ chúng tôi cũng sử dụng

import requests
1 thay vì
import requests
2

Đầu ra hoàn toàn giống nhau, nhưng mã của chúng tôi trông gọn gàng hơn một chút do tham số truy vấn riêng biệt

Thay vì sử dụng thư viện yêu cầu, bạn có thể sử dụng một số mô-đun khác. Ví dụ: Datamuse cũng có mô-đun Python. Các mô-đun này thường sử dụng mô-đun yêu cầu dưới mui xe và loại bỏ một số phức tạp

Sử dụng mô-đun có cả ưu và nhược điểm. Ưu điểm của mô-đun là thường xây dựng thứ gì đó nhanh hơn. Nhược điểm là một số mô-đun có thể hoạt động ngày hôm nay, nhưng sẽ không được duy trì trong tương lai

Ví dụ: nếu bạn muốn giao tiếp với API Twitter, bạn có thể xây dựng thứ gì đó từ đầu hoặc sử dụng mô-đun phổ biến. một ví dụ như Tweety

Trong trường hợp của Tweety, mô-đun này đã tồn tại được 8 năm và được duy trì tốt. Nếu bạn tìm thấy một mô-đun và lần cuối ai đó làm việc với nó là hơn hai năm trước, tốt hơn hết là bạn nên bỏ qua nó và sử dụng trực tiếp thư viện yêu cầu. Bạn vẫn có thể xem mã và sử dụng các phần của mô-đun làm nguồn cảm hứng cho mã của riêng mình

Xác thực API

Hãy chuyển sang ví dụ tiếp theo. Làm thế nào về một API yêu cầu xác thực? . Làm thế nào về chúng tôi giao tiếp với? . Bạn có thể giao tiếp với API của họ mà không cần đăng ký

Tôi đã giữ mã mẫu của mình càng ngắn càng tốt, không có các khối if/else hoặc try/ngoại trừ để chúng tôi có thể tập trung hoàn toàn vào phần xác thực. Đây là mã

Hãy để tôi giải thích đoạn mã trên

  • Chúng tôi có hai chức năng
    • Hàm get_token xác thực với DNA Center
      • Chúng tôi gửi một yêu cầu POST HTTP bao gồm tên người dùng, mật khẩu và tiêu đề chỉ định rằng chúng tôi sử dụng định dạng JSON
      • Khi API Trung tâm DNA xác thực chúng tôi thành công, API sẽ trả về mã thông báo mà chúng tôi cần sử dụng cho bất kỳ yêu cầu nào khác
      • Chúng tôi lưu trữ mã thông báo trong biến “mã thông báo”
    • Hàm get_data_from_dna_center lấy dữ liệu từ DNA Center
      • Chúng tôi gửi yêu cầu HTTP GET bao gồm tiêu đề với mã thông báo của chúng tôi
      • URL cơ sở cho API này là HTTPS. //sandboxdnac. cisco. com/api/v1
      • “Điểm cuối” xác định dữ liệu mà chúng tôi muốn truy xuất

Xuất sắc. Chúng tôi nhận được một danh sách các thiết bị mạng và thời gian hoạt động của chúng

Khi làm việc với API, một IDE có trình gỡ lỗi phù hợp sẽ rất hữu ích

Phần kết luận

Bây giờ bạn đã học cách giao tiếp với API bằng Python

  • API không cần xác thực
  • API có tham số truy vấn
  • API có xác thực

Những ví dụ này giúp hiểu những điều cơ bản. Tuy nhiên, bạn phải luôn kiểm tra tài liệu API để tìm hiểu cách giao tiếp với API. Nếu bạn may mắn, họ cung cấp các ví dụ cho Python hoặc bạn có thể sử dụng một mô-đun để không phải làm việc trực tiếp với mô-đun yêu cầu

Một bài học khác mà bạn có thể thích là bài học Giới thiệu về REST API. Trong bài học này, tôi giải thích API REST là gì và cách giao tiếp với bộ định tuyến CSR1000v bằng API REST

API hoạt động như thế nào trong Python?

API là viết tắt của giao diện lập trình ứng dụng. Về bản chất, API hoạt động như một lớp giao tiếp, hay đúng như tên gọi, một giao diện, cho phép các hệ thống khác nhau giao tiếp với nhau mà không cần phải hiểu chính xác những gì nhau làm. APIs can come in many forms or shapes.

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.

Làm cách nào để đọc 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 cú pháp dữ liệu thành định dạng JSON. .
Trích xuất dữ liệu và in nó

Kết nối với API hoạt động như thế nào?

Hầu hết các API web nằm giữa ứng dụng và máy chủ web. Người dùng bắt đầu lệnh gọi API yêu cầu ứng dụng thực hiện điều gì đó, sau đó ứng dụng sẽ sử dụng API để yêu cầu máy chủ web thực hiện điều gì đó . API là trung gian giữa ứng dụng và máy chủ web và lệnh gọi API là yêu cầu.