Bạn có thể tạo API bằng Python không?

Ngày nay, Python là một trong những ngôn ngữ lập trình phổ biến và dễ tiếp cận nhất. Năm 2019, nó được xếp hạng thứ ba trong xếp hạng TIOBE. Nhiều chuyên gia cho rằng 3-4 năm nữa nó sẽ vượt C và Java để dẫn đầu bảng xếp hạng

Dựa trên điều này, sẽ không ngạc nhiên nếu bạn sử dụng Python cho dự án tương tác API tiếp theo của mình. Trong bài viết này, chúng ta sẽ nói về sự khôn ngoan của việc sử dụng API và tại sao Python sẽ giúp ích rất nhiều trong nhiệm vụ này

Duyệt qua danh sách API miễn phí tốt nhất

API REST là gì [từ góc độ Python]

Đầu tiên, hãy xác định một API

API [Giao diện lập trình ứng dụng] là một bộ quy tắc được chia sẻ bởi một dịch vụ cụ thể. Các quy tắc này xác định định dạng nào và bộ lệnh nào mà ứng dụng của bạn có thể truy cập vào dịch vụ, cũng như dữ liệu nào mà dịch vụ này có thể trả về trong phản hồi. API hoạt động như một lớp giữa ứng dụng của bạn và dịch vụ bên ngoài. Bạn không cần biết cấu trúc bên trong và các tính năng của dịch vụ, bạn chỉ cần gửi một lệnh đơn giản nhất định và nhận dữ liệu theo định dạng định sẵn

API REST [Chuyển trạng thái đại diện] là API sử dụng các yêu cầu HTTP để liên lạc với các dịch vụ web

Nó phải tuân thủ các ràng buộc nhất định. Dưới đây là một số trong số họ

  1. Kiến trúc máy khách-máy chủ – máy khách chịu trách nhiệm về giao diện người dùng và máy chủ chịu trách nhiệm về phần phụ trợ và lưu trữ dữ liệu. Máy khách và máy chủ độc lập và mỗi máy có thể được thay thế
  2. Không trạng thái – không có dữ liệu từ máy khách được lưu trữ ở phía máy chủ. Trạng thái phiên được lưu trữ ở phía máy khách
  3. Có thể lưu vào bộ đệm – khách hàng có thể lưu các phản hồi của máy chủ vào bộ đệm để cải thiện hiệu suất

Một danh sách đầy đủ các ràng buộc bạn có thể thấy

Từ phía Python, API REST có thể được xem như một nguồn dữ liệu nằm trên một địa chỉ Internet có thể được truy cập theo một cách nhất định thông qua các thư viện nhất định

Các loại yêu cầu

Các loại Yêu cầu hoặc Phương thức Yêu cầu HTTP mô tả hành động mà chúng tôi sẽ thực hiện bằng cách tham khảo API

Tổng cộng, có bốn loại hành động chính

  • ĐƯỢC. truy xuất thông tin [như kết quả tìm kiếm]. Đây là loại yêu cầu phổ biến nhất. Sử dụng nó, chúng tôi có thể lấy dữ liệu mà chúng tôi quan tâm từ những dữ liệu mà API sẵn sàng chia sẻ
  • BƯU KIỆN. thêm dữ liệu mới vào máy chủ. Ví dụ: sử dụng loại yêu cầu này, bạn có thể thêm một mặt hàng mới vào kho của mình
  • ĐẶT. thay đổi thông tin hiện có. Ví dụ: sử dụng loại yêu cầu này, có thể thay đổi màu sắc hoặc giá trị của sản phẩm hiện có
  • XÓA BỎ. xóa thông tin hiện có

điều kiện tiên quyết

Để bắt đầu làm việc với API REST thông qua Python, bạn sẽ cần kết nối thư viện để gửi yêu cầu HTTP

Sự lựa chọn của thư viện phụ thuộc vào phiên bản Python

Nếu bạn sử dụng Python 2, chúng tôi khuyên bạn nên sử dụng unirest vì tính đơn giản, tốc độ và khả năng hoạt động với các yêu cầu đồng bộ và không đồng bộ

Nếu bạn làm việc với Python 3, thì chúng tôi khuyên bạn nên dừng lựa chọn đối với các yêu cầu là tiêu chuẩn thực tế để thực hiện các yêu cầu HTTP trong Python

Hơn nữa trong hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng Python 3. 6 cùng với thư viện yêu cầu. Đó là cách triển khai yêu cầu GET sẽ như thế nào khi sử dụng các yêu cầu

import requests
response = requests.get['//google.com/']
print[response]
>> 

Yêu cầu trả về Phản hồi, một đối tượng mạnh mẽ để kiểm tra kết quả của yêu cầu. Sử dụng Phản hồi, bạn có thể kiểm tra các tiêu đề và nội dung của phản hồi, lấy từ điển có dữ liệu từ JSON trong phản hồi và cũng xác định mức độ truy cập của chúng tôi vào máy chủ bằng mã phản hồi từ nó. Trong ví dụ của chúng tôi, mã phản hồi là 200, có nghĩa là yêu cầu đã thành công. Chúng tôi sẽ nghiên cứu các mã phản hồi và giá trị của chúng chi tiết hơn một chút

Mã trạng thái

Mã trạng thái được trả về cùng với phản hồi sau mỗi cuộc gọi đến máy chủ. Họ mô tả ngắn gọn kết quả của cuộc gọi. Có một số lượng lớn mã trạng thái, chúng tôi cung cấp những mã mà bạn thường gặp nhất

  • 200 – được. Yêu cầu đã thành công. Bản thân câu trả lời phụ thuộc vào phương thức được sử dụng [GET, POST, v.v. ] và đặc tả API
  • 204 – Không có nội dung. Máy chủ đã xử lý yêu cầu thành công và không trả lại bất kỳ nội dung nào
  • 301 – Đã di chuyển vĩnh viễn. Máy chủ phản hồi rằng trang được yêu cầu [điểm cuối] đã được chuyển đến một địa chỉ khác và chuyển hướng đến địa chỉ này
  • 400 – Yêu cầu sai. Máy chủ không thể xử lý yêu cầu do lỗi phía máy khách [định dạng yêu cầu không chính xác]
  • 401 – Trái phép. Xảy ra khi xác thực không thành công, do thông tin đăng nhập không chính xác hoặc thậm chí không có thông tin xác thực
  • 403 – Cấm. Truy cập vào tài nguyên được chỉ định bị từ chối
  • 404 không tìm thấy. Không tìm thấy tài nguyên được yêu cầu trên máy chủ
  • 500 – Lỗi máy chủ nội bộ. Xảy ra khi xảy ra lỗi không xác định trên máy chủ

Thư viện yêu cầu có một số thuộc tính hữu ích để làm việc với mã trạng thái. Ví dụ: bạn có thể chỉ cần xem trạng thái của mã phản hồi bằng cách truy cập. status_code

print[response.status_code]
>>> 200

Đó không phải là tất cả. Bạn có thể sử dụng thể hiện Phản hồi trong biểu thức điều kiện. Nó sẽ đánh giá là Đúng nếu mã trạng thái nằm trong khoảng từ 200 đến 400 và Sai nếu không

if response:
  print['Request is successful.']
else:
  print['Request returned an error.']

điểm cuối

Để làm việc với API REST, điều quan trọng là phải hiểu Điểm cuối là gì

Thông thường, Điểm cuối là một địa chỉ cụ thể [ví dụ: https. // thời tiết ở london. com/forecast], bằng cách đề cập đến việc bạn có quyền truy cập vào một số tính năng/dữ liệu nhất định [trong trường hợp của chúng tôi – dự báo thời tiết cho Luân Đôn]. Thông thường, tên [địa chỉ] của điểm cuối tương ứng với chức năng mà nó cung cấp

Để tìm hiểu thêm về điểm cuối, chúng ta sẽ xem xét ví dụ về API đơn giản trong dịch vụ RapidAPI. Dịch vụ này là một Trung tâm API cung cấp khả năng truy cập hàng nghìn API khác nhau. Một ưu điểm khác của RapidAPI là bạn có thể truy cập các điểm cuối và kiểm tra hoạt động của API trực tiếp trong phần của nó trong dịch vụ RapidAPI

Hãy lấy ví dụ về API Dino Ipsum. API này được sử dụng để tạo bất kỳ số lượng văn bản giữ chỗ Lorem Ipsum nào. Nó rất hữu ích khi bạn tạo nguyên mẫu hoặc thử nghiệm giao diện ứng dụng của mình và muốn điền vào đó bất kỳ nội dung ngẫu nhiên nào

Để tìm phần API Dino Ipsum, hãy nhập tên của nó vào hộp tìm kiếm trong dịch vụ RapidAPI hoặc chuyển đến danh mục “Khác” từ danh sách “Tất cả danh mục” và chọn API này từ danh sách. Dino Ipsum API thông qua RapidAPI là miễn phí, vì vậy bạn có thể nhận bao nhiêu văn bản giữ chỗ tùy thích

Khi bạn chọn Dino Ipsum API, trang đầu tiên bạn sẽ thấy là tiểu mục Điểm cuối API. Điều này bao gồm hầu hết các thông tin cần thiết để bắt đầu. Tiểu mục Điểm cuối API bao gồm điều hướng, danh sách điểm cuối [chỉ một điểm cho API này], tài liệu về điểm cuối hiện được chọn và đoạn mã [có sẵn bằng 8 ngôn ngữ lập trình khác nhau] để giúp bạn bắt đầu với mã của mình

Chúng tôi sẽ kiểm tra điểm cuối duy nhất mà API này có – danh sách khủng long, trả về một lượng văn bản giữ chỗ nhất định, tùy thuộc vào các tham số đã nhập. Hiện tại chúng tôi đang thực hành với Python, chúng tôi muốn lấy một đoạn mã Python và kiểm tra nó trong ứng dụng của chúng tôi. Điền vào các tham số bắt buộc [định dạng=văn bản, từ=10, đoạn văn=1] và đây là đoạn mã của chúng tôi

response = unirest.get["//alexnormand-dino-ipsum.p.rapidapi.com/?format=text&words=10¶graphs=1",
  headers={
    "X-RapidAPI-Host": "alexnormand-dino-ipsum.p.rapidapi.com",
    "X-RapidAPI-Key": "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
]

Để sử dụng nó với Python 3. 6, chúng ta cần thay đổi unirest để yêu cầu. Vì vậy, chúng tôi nhận được một ứng dụng như vậy

import requests

words = 30
paragraphs = 1
formats = 'text'

response = requests.get[f"//alexnormand-dino-ipsum.p.rapidapi.com/?format={formats}&words={words}¶graphs={paragraphs}",
 headers={
   "X-RapidAPI-Host": "alexnormand-dino-ipsum.p.rapidapi.com",
   "X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 }
]

print[response.text]

Ứng dụng của chúng tôi sẽ gọi điểm cuối, được đặt tại https. // alexnormand-dino-ipsum. p. nhanh chóng. com/ và sẽ in cho chúng tôi văn bản giữ chỗ đẹp mắt này

print[response.status_code]
>>> 200
0

Duyệt API

Nhận phản hồi JSON từ yêu cầu API

Thường thì REST API trả về một phản hồi ở định dạng JSON để dễ xử lý thêm. Thư viện yêu cầu có một tiện ích. json[] cho trường hợp này để chuyển đổi JSON thành đối tượng Python

API Dino Ipsum vốn đã quen thuộc sẽ giúp chúng tôi kiểm tra chức năng này. Chúng tôi có thể nhận được JSON từ nó trong phản hồi nếu chúng tôi chỉ định tham số format = JSON khi truy cập điểm cuối danh sách khủng long

import requests

params = {"words": 10, "paragraphs": 1, "format": "json"}

response = requests.get[f"//alexnormand-dino-ipsum.p.rapidapi.com/", params=params,
 headers={
   "X-RapidAPI-Host": "alexnormand-dino-ipsum.p.rapidapi.com",
   "X-RapidAPI-Key": "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 }
]

print [type[response.json[]]]
print[response.json[]]
>>> 
>>> [['Olorotitan', 'Megadactylus', 'Atlantosaurus', 'Angolatitan', 'Sinosauropteryx', 'Camptonotus', 'Protarchaeopteryx', 'Unescoceratops', 'Shanag', 'Archaeoceratops']]

Lưu ý rằng lần này chúng tôi không chỉ định các tham số truy vấn trong URL mà trong đối số params của hàm

print[response.status_code]
>>> 200
1. Định dạng truyền tham số như vậy thậm chí còn thích hợp hơn

Cách bắt đầu sử dụng API với Python

Đã xử lý các sắc thái khi làm việc với API trong Python, chúng ta có thể tạo hướng dẫn từng bước

1. Nhận khóa API


Khóa API [thường] là một chuỗi ký tự và số duy nhất. Để bắt đầu làm việc với hầu hết các API – bạn phải đăng ký và nhận khóa API. Bạn sẽ cần thêm khóa API vào mỗi yêu cầu để API có thể nhận dạng bạn. Lấy ví dụ về RapidAPI – bạn có thể chọn phương thức đăng ký thuận tiện cho mình. Đây có thể là tên người dùng, email và mật khẩu. Tài khoản Google, Facebook hoặc Github

2. Kiểm tra điểm cuối API với Python


Khi chúng tôi nhận được khóa API, chúng tôi có thể tham khảo các điểm cuối API [theo tài liệu] để kiểm tra xem mọi thứ có hoạt động như chúng tôi mong đợi không. Nếu chúng tôi làm việc với RapidAPI ngay sau khi đăng ký dịch vụ, chúng tôi có thể chuyển đến phần API cần thiết, đăng ký nếu cần và kiểm tra câu trả lời của các điểm cuối chúng tôi cần trực tiếp trên trang API. Tiếp theo, chúng ta có thể tạo một đoạn mã Python triển khai chức năng mà chúng ta vừa kiểm tra và nhanh chóng kiểm tra nó bằng IPython hoặc chỉ cần chèn nó vào ứng dụng Python của chúng ta

3. Tạo ứng dụng Python đầu tiên của bạn với API


Sau khi chúng tôi đã kiểm tra các điểm cuối và mọi thứ hoạt động như chúng tôi mong đợi, chúng tôi có thể bắt đầu tạo ứng dụng, bao gồm các cuộc gọi đến API cần thiết. Như chúng tôi đã đề cập, RapidAPI sẽ giúp chúng tôi ở đây. Trên trang API chúng tôi cần, chúng tôi có thể sử dụng khối Đoạn mã và lấy đoạn mã Python có quyền truy cập vào điểm cuối cần thiết. Chúng ta chỉ cần nhớ rằng nếu sử dụng Python 3, chúng ta cần thay thế thư viện đơn nhất bằng các yêu cầu trong đoạn mã

Bắt đầu ngay bây giờ

Ví dụ API Python. Ứng dụng xem trái đất với API của NASA

Có trong tay các tính năng mạnh mẽ của Python và quyền truy cập vào nhiều loại API, chúng ta có thể làm điều gì đó tuyệt vời, chẳng hạn như khám phá độ sâu của không gian hoặc nhìn Trái đất từ ​​​​quỹ đạo để bắt đầu. Đối với những tác vụ như vậy, chúng tôi sẽ cần API của NASA, có sẵn thông qua RapidAPI

1. Nhận khóa API

API của NASA miễn phí, trong trường hợp cơ bản, nó không yêu cầu đăng ký đặc biệt. Tuy nhiên, với việc sử dụng nhiều API, bạn nên đăng ký khóa dành cho nhà phát triển của NASA. Chúng tôi sẽ không sử dụng nó nhiều, vì vậy ngay sau khi đăng ký với dịch vụ RapidAPI, chúng tôi sẽ nhận được khóa dịch vụ và điều này là đủ đối với chúng tôi. Bạn có thể đăng ký bằng cách nhấp vào nút Đăng ký trong menu RapidAPI

Như chúng tôi đã đề cập, bạn có thể đăng ký theo bất kỳ cách thuận tiện nào

2. Kiểm tra điểm cuối API với Python

Sau khi đăng ký, hãy truy cập trang API của NASA. Nhập tên của nó vào hộp tìm kiếm tại dịch vụ RapidAPI hoặc chuyển đến danh mục “Khoa học” từ danh sách “Tất cả danh mục” và chọn API này từ danh sách

Chúng tôi quan tâm đến điểm cuối

print[response.status_code]
>>> 200
2, cung cấp danh sách các tên ảnh Trái đất được chụp bởi máy ảnh EPIC của NASA trên tàu vũ trụ NOAA DSCOVR. Theo mặc định, nó cung cấp những bức ảnh gần đây nhất. Nếu muốn, bạn cũng có thể chỉ định ngày của ảnh trong tham số ngày. Chúng tôi cần những bức ảnh mới, vì vậy các điều kiện mặc định phù hợp với chúng tôi

Với sự trợ giúp của khối Đoạn mã, chúng tôi nhận được mã chúng tôi cần. Vì chúng tôi sử dụng Python 3, chúng tôi cần thay thế thư viện unirest trong đoạn trích bằng các yêu cầu. Vì vậy, đây là đoạn trích cuối cùng của chúng tôi

response = unirest.post["//NasaAPIdimasV1.p.rapidapi.com/getEPICEarthImagery",
  headers={
    "X-RapidAPI-Host": "NasaAPIdimasV1.p.rapidapi.com",
    "X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "Content-Type": "application/x-www-form-urlencoded"
  }
]

Phương thức

print[response.status_code]
>>> 200
3 trả về một từ điển Python với danh sách tên và thuộc tính của ảnh. Rõ ràng, mọi thứ hoạt động tốt và chúng ta có thể bắt đầu viết ứng dụng của mình
Tạo ứng dụng đầu tiên của bạn với API

Với sự trợ giúp của dữ liệu với hình ảnh Trái đất, chúng ta có thể tạo ứng dụng nhỏ của riêng mình để tạo ra hình ảnh động về Trái đất dựa trên những bức ảnh mới nhất của NASA

Chúng tôi sẽ cần thư viện skigage để thay đổi kích thước hình ảnh, cũng như imageio để tạo một gif động duy nhất dựa trên lựa chọn hình ảnh. Chúng ta có thể cài đặt chúng bằng lệnh

pip3 install scikit-image imageio

Chúng tôi cũng sẽ cần thư viện regex để tạo các biến riêng biệt với thông tin về năm, tháng, ngày của ảnh từ chuỗi ngày đầy đủ. Chúng tôi sẽ cần các biến này để tạo thành url của ảnh Trái đất ở định dạng.

print[response.status_code]
>>> 200
4

Kết quả là, chúng tôi nhận được ứng dụng sau

import requests
import re
import imageio
from skimage import transform,io

# get json with information [including name and date] about Earth pictures
response = requests.post["//NasaAPIdimasV1.p.rapidapi.com/getEPICEarthImagery",
 headers={
   "X-RapidAPI-Host": "NasaAPIdimasV1.p.rapidapi.com",
   "X-RapidAPI-Key": "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
   "Content-Type": "application/x-www-form-urlencoded"
 }
]

# convert json to Python object 
data = response.json[]

# create regex pattern to get separately year, month and day of an image
dates_pattern = r"^[?Pd{4}]-[?Pd{2}]-[?Pd{2}]"

# download images and save each to ./images folder
for img in data['contextWrites']['to']:
   # get year, month and day with regex to create image url
   matches = re.search[dates_pattern, img['date']]
   year = matches.group['year']
   month = matches.group['month']
   day = matches.group['day']
   image_name = img['image']
   img_url = f'//epic.gsfc.nasa.gov/archive/natural/{year}/{month}/{day}/png/{image_name}.png'
   # save image to ./images folder
   img_data = requests.get[img_url].content
   with open[f'images/{image_name}.png', 'wb'] as handler:
       handler.write[img_data]

index = range[len[data['contextWrites']['to']]]
images = []

# resize images and create gif from them
for i in index:
   img_name = data["contextWrites"]["to"][i]["image"]   
   img = io.imread[f'images/{img_name}.png']
   small_img = transform.resize[img, [500, 500], mode='symmetric', preserve_range=True]
   images.append[small_img]
imageio.mimsave['images/earth500.gif', images]

Chúng tôi đã thu được một hình ảnh như vậy của Trái đất từ ​​​​quỹ đạo. Một điểm khởi đầu tốt để khám phá không gian xa hơn

Duyệt qua danh sách API miễn phí tốt nhất

Phần kết luận

Trong bài viết này, chúng tôi đã bắt đầu sử dụng API REST trong Python và thực hiện nhất quán tất cả các bước cần thiết để tạo một ứng dụng Python sử dụng cơ hội gần như vô hạn của API

Python có tốt để tạo API không?

Python là lựa chọn hàng đầu cho bất kỳ lập trình viên lần đầu nào . Kể từ khi được phát hành vào năm 1991, Python đã phát triển và được cung cấp bởi một số khung để phát triển ứng dụng web, tính toán khoa học và toán học cũng như giao diện người dùng đồ họa cho các khung API REST mới nhất.

Làm cách nào để tạo yêu cầu API bằng Python?

Thực hiện lệnh gọi API của bạn .
def get_data[bản thân, api]
phản ứng = yêu cầu. nhận [f"{api}"]
nếu phản hồi. status_code == 200
print["lấy dữ liệu thành công"]
bản thân. formatted_print[phản hồi. json[]]
print[f"Xin chào mọi người, có {response. status_code} lỗi với yêu cầu của bạn"]

Chủ Đề