Hiển thị tập lệnh python dưới dạng api còn lại

Năm phương thức HTTP này có thể được Ứng dụng khách API REST của Python sử dụng để quản lý trạng thái tài nguyên trong dịch vụ web

Mã trạng thái

Phản hồi HTTP được trả về bởi API REST của Python hoặc bất kỳ API nào sau khi nó nhận và thực thi yêu cầu HTTP. Mã trạng thái HTTP được bao gồm trong phản hồi này. Mã này chứa thông tin về kết quả của yêu cầu. Mã trạng thái có thể được kiểm tra bởi một ứng dụng gửi yêu cầu tới API và có thể thực hiện các hành động dựa trên kết quả. Xử lý lỗi hoặc cung cấp thông báo thành công cho người dùng là ví dụ về những hành động này

Các mã trạng thái thường xuyên nhất được API Python REST trả về được liệt kê bên dưới

Nguồn hình ảnh

Mười Mã trạng thái này chỉ là một phần nhỏ trong tổng số Mã trạng thái HTTP có thể truy cập. Việc đánh số Mã trạng thái dựa trên danh mục kết quả

Nguồn hình ảnh

Khi làm việc với API REST của Python hoặc bất kỳ API nào, Mã trạng thái HTTP rất hữu ích vì bạn thường sẽ cần áp dụng nhiều logic khác nhau tùy thuộc vào kết quả của yêu cầu

Kiến trúc REST

Với Kiến trúc REST mang đến sự linh hoạt mà các chuyên gia thực hiện phân trang. REST có một tập hợp các ràng buộc chính [hoặc chung] được xác định đóng vai trò quan trọng khi phát triển API RESTful. Chúng ta hãy nhìn vào chúng

  1. Máy khách-Máy chủ. Hạn chế máy khách-máy chủ dựa trên ý tưởng rằng máy khách và máy chủ nên được tách biệt và được phép phát triển độc lập. Nói cách khác, tôi có thể sửa đổi ứng dụng di động của mình mà không ảnh hưởng đến cấu trúc dữ liệu hoặc thiết kế cơ sở dữ liệu của máy chủ. Đồng thời, tôi có thể thay đổi cơ sở dữ liệu hoặc chương trình máy chủ của mình mà không ảnh hưởng đến ứng dụng khách di động. Điều này giúp tách biệt các mối quan tâm, cho phép một ứng dụng mở rộng và mở rộng quy mô độc lập với các ứng dụng khác, cho phép công ty của bạn phát triển nhanh chóng và hiệu quả
  2. không quốc tịch. Các API REST của Python là không trạng thái, có nghĩa là các lệnh gọi có thể được thực hiện độc lập với nhau và mỗi lệnh gọi chứa tất cả dữ liệu cần thiết để tự hoàn thành chính xác. API REST của Python không nên dựa vào dữ liệu được lưu trên máy chủ hoặc phiên để xác định phải làm gì với yêu cầu, mà thay vào đó nên hoàn toàn dựa vào dữ liệu được cung cấp trong lệnh gọi đó. Khi thực hiện cuộc gọi, không có thông tin nhận dạng nào được giữ lại trên máy chủ. Thay vào đó, mỗi yêu cầu chứa tất cả dữ liệu liên quan, chẳng hạn như khóa API, mã thông báo truy cập, ID người dùng, v.v.
  3. Bộ nhớ cache. API REST của Python nên được xây dựng để tạo điều kiện thuận lợi cho việc lưu trữ dữ liệu có thể lưu trong bộ nhớ cache vì API không trạng thái có thể tăng chi phí yêu cầu bằng cách quản lý vô số yêu cầu đến và đi. Điều này ngụ ý rằng khi dữ liệu có thể lưu vào bộ nhớ cache, câu trả lời sẽ chỉ ra rằng dữ liệu có thể được lưu trong một khoảng thời gian cụ thể hoặc phản hồi không được lưu vào bộ nhớ cache bởi máy khách trong trường hợp dữ liệu phải là thời gian thực. Bằng cách kích hoạt giới hạn thiết yếu này, bạn sẽ không chỉ giảm thiểu đáng kể số lượng liên hệ với API của mình và giảm mức tiêu thụ máy chủ nội bộ mà còn cung cấp cho người dùng API của mình những công cụ họ cần để tạo ứng dụng nhanh nhất và hiệu quả nhất có thể tưởng tượng được
  4. Giao diện thống nhất. Chìa khóa để tách rời máy khách và máy chủ là cung cấp một giao diện tiêu chuẩn cho phép chương trình phát triển độc lập mà không cần các dịch vụ, mô hình hoặc hành động của ứng dụng bị ràng buộc chặt chẽ với chính lớp API. Giao diện thống nhất cho phép máy khách giao tiếp với máy chủ bằng một ngôn ngữ duy nhất, bất kể nền tảng kiến ​​trúc. Giao diện này sẽ cung cấp một cách nhất quán, được tiêu chuẩn hóa để máy khách và máy chủ giao tiếp
  5. Hệ thống lớp. Một hệ thống phân lớp, như tên gọi, là một hệ thống được tạo thành từ các cấp, mỗi cấp có một bộ chức năng và trách nhiệm riêng. Khi xem xét cấu trúc Bộ điều khiển Chế độ xem Mô hình, mỗi lớp có một bộ nhiệm vụ riêng, với các mô hình xác định cách tạo dữ liệu, bộ điều khiển tập trung vào các hành động đến và chế độ xem tập trung vào đầu ra. Mỗi lớp là khác biệt, nhưng tất cả chúng đều tương tác với nhau. Cách tiếp cận tương tự áp dụng cho thiết kế API REST của Python, với các cấp độ khác nhau của kiến ​​trúc cộng tác để thiết lập một hệ thống phân cấp hỗ trợ tạo ra một ứng dụng linh hoạt và có thể mở rộng hơn
  6. Mã theo yêu cầu. Mã theo yêu cầu, có thể là ràng buộc ít được biết đến nhất trong sáu ràng buộc và ràng buộc tùy chọn duy nhất, cho phép mã hoặc ứng dụng được phân phối qua API để sử dụng trong ứng dụng. Về bản chất, nó tạo ra một chương trình thông minh không còn phụ thuộc hoàn toàn vào cấu trúc mã của chính nó. Tuy nhiên, có thể do đi trước thời đại nên Mã theo yêu cầu đã phải vật lộn để đạt được sức hút khi các API Web được truy cập bằng nhiều ngôn ngữ và việc chuyển mã làm nảy sinh các vấn đề về bảo mật. [Ví dụ: thư mục phải có thể ghi được và tường lửa phải cho phép thông tin bị cấm thông thường đi qua. ]

Trăn là gì?

Python là ngôn ngữ lập trình đa năng, cấp cao được diễn giải. Việc sử dụng thụt đầu dòng đáng kể trong triết lý thiết kế của nó nhấn mạnh khả năng đọc mã. Các yếu tố ngôn ngữ và cách tiếp cận hướng đối tượng của nó nhằm mục đích hỗ trợ các lập trình viên viết mã hợp lý, rõ ràng cho cả các dự án quy mô lớn và nhỏ

Python được thu gom rác và gõ động. Nó hỗ trợ nhiều mô hình lập trình, bao gồm lập trình có cấu trúc [đặc biệt là thủ tục], lập trình hướng đối tượng và lập trình chức năng. Do thư viện tiêu chuẩn phong phú của nó, nó thường được gọi là ngôn ngữ “bao gồm pin”

Để biết thêm thông tin về Python, hãy xem trang web chính thức tại đây

Đơn giản hóa ETL với Đường ống dữ liệu không mã của Hevo

Nền tảng Đường ống dữ liệu không có mã được quản lý hoàn toàn như Hevo Data giúp bạn tích hợp và tải dữ liệu từ hơn 100 nguồn khác nhau [hơn 40 nguồn dữ liệu miễn phí] đến Kho dữ liệu hoặc Điểm đến mà bạn chọn trong thời gian thực một cách dễ dàng. Hevo với đường cong học tập tối thiểu có thể được thiết lập chỉ trong vài phút cho phép người dùng tải dữ liệu mà không phải ảnh hưởng đến hiệu suất

Bắt đầu với Hevo miễn phí

Nó giúp truyền dữ liệu từ nguồn bạn chọn đến đích bạn chọn. Sự tích hợp mạnh mẽ của nó với vô số nguồn cho phép người dùng đưa vào các loại dữ liệu khác nhau một cách trơn tru mà không cần phải viết mã một dòng nào.  

Kiểm tra một số tính năng thú vị của Hevo

  • hoàn toàn tự động. Nền tảng Hevo có thể được thiết lập chỉ trong vài phút và yêu cầu bảo trì tối thiểu
  • kết nối. Hevo hỗ trợ hơn 100 Tích hợp cho các nền tảng SaaS như Shopify, tệp, Cơ sở dữ liệu, phân tích và công cụ BI. Nó hỗ trợ các điểm đến khác nhau bao gồm Google BigQuery, Amazon Redshift, Snowflake Data Warehouses; .   
  • Truyền dữ liệu theo thời gian thực. Hevo cung cấp khả năng di chuyển dữ liệu theo thời gian thực, vì vậy bạn luôn có thể có dữ liệu sẵn sàng cho phân tích
  • Truyền dữ liệu hoàn chỉnh và chính xác 100%. Cơ sở hạ tầng mạnh mẽ của Hevo đảm bảo truyền dữ liệu đáng tin cậy mà không làm mất dữ liệu
  • Cơ sở hạ tầng có thể mở rộng. Hevo có tích hợp sẵn cho hơn 100 nguồn [bao gồm hơn 40 nguồn miễn phí] chẳng hạn như Shopify, có thể giúp bạn mở rộng quy mô cơ sở hạ tầng dữ liệu theo yêu cầu
  • Hỗ trợ trực tiếp 24/7. Nhóm Hevo luôn sẵn sàng mở rộng hỗ trợ đặc biệt cho bạn thông qua trò chuyện, email và các cuộc gọi hỗ trợ
  • Quản lý lược đồ. Hevo loại bỏ nhiệm vụ quản lý lược đồ tẻ nhạt & tự động phát hiện lược đồ của dữ liệu đến và ánh xạ nó tới lược đồ đích
  • Giám sát trực tiếp. Hevo cho phép bạn giám sát luồng dữ liệu để bạn có thể kiểm tra xem dữ liệu của mình đang ở đâu tại một thời điểm cụ thể
Đăng ký tại đây để dùng thử miễn phí 14 ngày

API REST của Python. Sử dụng API và yêu cầu

Hầu hết các lập trình viên Python sử dụng các yêu cầu để gửi các yêu cầu HTTP khi viết mã tương tác với API REST, được gọi là API REST của Python. Sự phức tạp của việc thực hiện các yêu cầu HTTP được trừu tượng hóa bằng cách sử dụng mô-đun Python REST API này. API REST của Python là một trong số ít các dự án xứng đáng được đối xử như thể nó thuộc về thư viện tiêu chuẩn

Trước tiên, bạn phải cài đặt các yêu cầu trước khi có thể sử dụng chúng. Bạn có thể cài đặt nó với pip

$ python -m pip install requests

Bạn có thể bắt đầu gửi yêu cầu HTTP ngay bây giờ khi bạn đã cài đặt yêu cầu

1] NHẬN

Khi làm việc với API REST của Python, một trong những phương thức HTTP được sử dụng nhiều nhất là GET. Bạn có thể sử dụng phương pháp này để lấy tài nguyên từ API. Vì GET là phương thức chỉ đọc nên không được sử dụng nó để thay đổi tài nguyên hiện có

Bạn sẽ sử dụng một dịch vụ có tên JSONPlaceholder để kiểm tra GET và các phương thức khác trong phần này. Dịch vụ miễn phí này tạo ra các điểm cuối API Python REST giả trả về kết quả có thể được xử lý theo yêu cầu

Để kiểm tra điều này, hãy mở REPL của Python và chạy các lệnh bên dưới để gửi yêu cầu GET tới điểm cuối JSONPlaceholder

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}

Yêu cầu được gọi bởi mã này. sử dụng get[] để thực hiện yêu cầu GET tới /todos/1, yêu cầu này trả về mục việc cần làm với ID 1 làm phản hồi. Sau đó, dữ liệu do API trả về có thể được xem bằng lệnh gọi. json[] trên đối tượng phản hồi

JSON, kho lưu trữ khóa-giá trị có thể so sánh với từ điển Python, được sử dụng để định dạng dữ liệu trả về. Đó là định dạng dữ liệu được sử dụng rộng rãi mà hầu hết các API REST của Python sử dụng làm định dạng trao đổi trên thực tế

Bạn có thể xem thêm thông tin về câu trả lời ngoài dữ liệu JSON từ API REST của Python

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'

Bạn có thể thấy mã trạng thái HTTP bằng cách truy cập phản hồi. mã trạng thái. Với phản hồi. tiêu đề, bạn có thể thấy tiêu đề HTTP của phản hồi. Từ điển này lưu trữ thông tin về phản hồi, chẳng hạn như Loại nội dung của phản hồi

2] BÀI ĐĂNG

Hãy xem cách bạn có thể xây dựng tài nguyên mới bằng cách sử dụng các yêu cầu để POST dữ liệu lên API REST của Python. Bạn sẽ sử dụng JSONPlaceholder một lần nữa, nhưng lần này với dữ liệu JSON có trong yêu cầu. Đây là thông tin bạn sẽ gửi

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}

Một mục việc cần làm mới được đại diện bởi JSON này. Để tạo một việc cần làm mới, hãy quay lại Python REPL và nhập mã sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201

Để thêm một việc cần làm mới vào hệ thống, bạn sử dụng các yêu cầu. bưu kiện[]

Để bắt đầu, hãy tạo một từ điển với dữ liệu cho việc cần làm của bạn. Sau đó, bạn gửi từ điển này để yêu cầu. post[] Tham số từ khóa JSON. Khi bạn làm điều này, yêu cầu. post[] đặt tiêu đề HTTP Loại nội dung của yêu cầu thành application/json. Nó cũng chuyển đổi việc cần làm thành một chuỗi JSON, chuỗi này sẽ thêm vào phần thân của yêu cầu

Nếu bạn không sử dụng đối số từ khóa JSON để phân phối dữ liệu JSON, bạn sẽ phải xác định Loại nội dung theo cách thủ công và tuần tự hóa JSON. Đây là một sự thay thế cho mã trước đó

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201

Bạn thêm một từ điển tiêu đề với một Loại nội dung tiêu đề duy nhất được đặt thành ứng dụng/json trong mã này. Điều này thông báo cho Python REST API rằng yêu cầu chứa dữ liệu JSON

Thay vì cung cấp việc cần làm cho tham số JSON, bạn gọi json. dumps[to-do] để tuần tự hóa nó trước khi sử dụng các yêu cầu. bưu kiện[]. Bạn cung cấp nó cho đối số từ khóa dữ liệu sau khi nó được tuần tự hóa. Đối số dữ liệu chỉ định dữ liệu nào sẽ được đưa vào yêu cầu. Bạn cũng có thể đặt tiêu đề HTTP theo cách thủ công bỏ qua từ điển tiêu đề theo yêu cầu. bưu kiện[]

Khi bạn sử dụng yêu cầu. post[] như thế này, bạn sẽ nhận được kết quả như trước, nhưng bạn có quyền kiểm soát yêu cầu tốt hơn

Để đọc JSON được API REST của Python trả về, hãy gọi phản hồi. json[]. Một id đã tạo cho việc cần làm mới được bao gồm trong JSON. Một tài nguyên mới đã được tạo, như được hiển thị bởi mã trạng thái 201

3] XÓA

Cuối cùng, nếu bạn muốn xóa hoàn toàn một tài nguyên, bạn có thể sử dụng DELETE. Để xóa một việc cần làm, hãy sử dụng đoạn mã sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200

Yêu cầu là những gì bạn đặt tên cho họ. Sử dụng xóa [] với URL API chứa ID của việc cần làm mà bạn muốn xóa. Thao tác này sẽ gửi một yêu cầu XÓA tới API REST của Python, thao tác này sẽ xóa tài nguyên khớp với. API trả về một đối tượng JSON trống cho biết rằng tài nguyên đã bị hủy sau khi nó bị xóa

Gói yêu cầu là một công cụ tuyệt vời để làm việc với API REST của Python và là thứ bắt buộc phải có trong hộp công cụ Python của bạn. Bạn sẽ sang số trong phần tiếp theo và phân tích những gì cần thiết để tạo một API REST của Python

4] ĐẶT

Các yêu cầu hỗ trợ tất cả các phương thức HTTP khác nhau mà bạn sử dụng với API REST của Python, ngoài GET và POST. Đoạn mã dưới đây tạo một yêu cầu PUT để cập nhật một việc cần làm hiện có với thông tin mới. Mọi dữ liệu được gửi bằng yêu cầu PUT sẽ ghi đè hoàn toàn các giá trị hiện tại của việc cần làm

Bạn sẽ sử dụng cùng một điểm cuối JSONPlaceholder như đối với GET và POST, nhưng lần này hãy thêm 10 vào cuối URL. Điều này hướng dẫn API REST của Python cập nhật việc cần làm sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200

Điều đầu tiên bạn làm là gọi điện thoại để yêu cầu. Để xem nội dung của một việc cần làm hiện có, hãy sử dụng get[]. Sau đó, bạn đưa ra yêu cầu. Để thay thế các giá trị việc cần làm hiện có, hãy sử dụng put[] bằng dữ liệu JSON mới. Khi bạn gọi phản hồi, bạn có thể thấy các giá trị mới với json[]. Vì bạn đang thay đổi tài nguyên hiện có thay vì tạo tài nguyên mới, các yêu cầu PUT thành công luôn trả về 200 thay vì 201

5] VÁ

Tiếp theo, bạn sẽ sử dụng các yêu cầu. patch[] để thay đổi giá trị của trường được chỉ định của việc cần làm hiện có. Ngược lại, với PUT, PATCH sẽ không thay thế hoàn toàn tài nguyên hiện có. Nó chỉ thay đổi các giá trị trong JSON được cung cấp cùng với yêu cầu. Để kiểm tra yêu cầu. patch[], bạn sẽ sử dụng công việc tương tự như trong ví dụ trước. Các giá trị hiện tại như sau

Bây giờ bạn có thể thêm một giá trị mới vào tiêu đề

________số 8

Khi bạn sử dụng phản hồi. json[], bạn sẽ nhận thấy tiêu đề đã được đổi thành “Cắt cỏ”

REST và Python. Xây dựng API

Thiết kế API REST của Python là một chủ đề rộng lớn với nhiều cấp độ. Như với hầu hết mọi thứ trong công nghệ, có nhiều quan điểm khác nhau về cách tốt nhất để phát triển API. Phần này sẽ đi qua một số quy trình đề xuất cần thực hiện khi phát triển API

Xác định tài nguyên. Bước đầu tiên trong việc phát triển API Python REST là xác định các tài nguyên mà API sẽ xử lý. Các tài nguyên này thường được gọi là danh từ số nhiều, chẳng hạn như người tiêu dùng, sự kiện hoặc giao dịch. Khi bạn xác định các tài nguyên khác nhau trong dịch vụ web của mình, bạn sẽ tạo một danh sách các danh từ đại diện cho các loại dữ liệu khác nhau mà người tiêu dùng có thể kiểm soát bằng API. Tính đến mọi tài nguyên lồng nhau khi bạn thực hiện. Ví dụ: khách hàng có thể có doanh số bán hàng và sự kiện thậm chí có thể có khách. Việc tạo các hệ thống phân cấp tài nguyên này sẽ hỗ trợ định nghĩa các điểm cuối API

Xác định điểm cuối. Các điểm cuối sau được sử dụng sau khi tài nguyên trong dịch vụ web của bạn được xác định

HTTP MethodAPI EndpointDescriptionGET
$ python -m pip install requests
01Get a list of transactions.GET/transactions/Get a single transaction.POST/transactionsCreate a new transaction.PUT/transactions/Update a transaction.PATCH/transactions/Partially update a transaction.DELETE/transactions/Delete a transaction.

Tiếp theo, chúng tôi đã đề cập đến một số ví dụ về điểm cuối cho tài nguyên lồng nhau. Các điểm cuối được cung cấp bên dưới dành cho "khách", được lồng trong tài nguyên sự kiện

HTTP MethodAPI EndpointDescriptionGET/events//guestsGet a list of guests.GET/events//guests/Get a single guest.POST/events//guestsCreate a new guest.PUT/events//guests/Update a guest.PATCH
$ python -m pip install requests
02Partially update a guest.DELETE/events//guests/Delete a guest.

Chọn định dạng trao đổi dữ liệu. Hai tùy chọn phổ biến nhất để định dạng dữ liệu dịch vụ web là XML và JSON. Nói chung, XML phổ biến với API SOAP và JSON phổ biến hơn với API REST của Python. Hãy xem đoạn mã dưới đây để biết cuốn sách được định dạng là XML

$ python -m pip install requests
0

Để mã hóa dữ liệu, XML sử dụng một chuỗi các thành phần. Mỗi phần tử có một thẻ mở và thẻ đóng, cũng như dữ liệu ở giữa. Các thành phần có thể xếp chồng lên nhau trong các thành phần khác. Điều này có thể được nhìn thấy trong ví dụ trên, trong đó nhiều thẻ tác giả> được lồng bên trong các tác giả>

Mã được cung cấp bên dưới dành cho sách được định dạng bằng JSON

$ python -m pip install requests
1

JSON, giống như một từ điển Python, lưu trữ dữ liệu theo cặp khóa-giá trị. JSON, giống như XML, cho phép bạn phân lớp dữ liệu ở mọi cấp độ, cho phép bạn biểu diễn dữ liệu phức tạp

Cả JSON và XML về cơ bản đều không vượt trội so với cái kia, nhưng JSON được các nhà phát triển API Pyhton REST ưa thích hơn. Điều này đặc biệt đúng khi API REST của Python được sử dụng với khung giao diện người dùng như React hoặc Vue

Thiết kế phản hồi thành công. Bước tiếp theo sau khi định dạng dữ liệu được chọn là phản hồi các yêu cầu HTTP. Điều kiện tiên quyết là bạn phải chọn một định dạng tương tự cho từng API REST của Python, bao gồm cả mã trạng thái HTTP phù hợp

Trong phần này, bạn sẽ thấy một số câu trả lời HTTP mẫu cho API hư cấu xử lý kho xe. Những ví dụ này sẽ giúp bạn hiểu cách cấu trúc câu trả lời API của mình. Để làm rõ, bạn sẽ kiểm tra các câu trả lời và yêu cầu HTTP thô thay vì các truy vấn giống như thư viện HTTP

Để bắt đầu, hãy xem xét yêu cầu GET sau đây tới /cars, yêu cầu này trả về danh sách ô tô

$ python -m pip install requests
2

Yêu cầu HTTP có bốn phần

  1. $ python -m pip install requests
    03 là loại phương thức HTTP
  2. $ python -m pip install requests
    04 là điểm cuối API
  3. $ python -m pip install requests
    05 là phiên bản HTTP
  4. $ python -m pip install requests
    06 là máy chủ lưu trữ API

Bốn thành phần này là tất cả những gì được yêu cầu để gửi yêu cầu GET tới /cars. Hãy xem qua câu trả lời ngay bây giờ. JSON là định dạng truyền dữ liệu được sử dụng bởi API này

$ python -m pip install requests
3

API cung cấp danh sách ô tô dưới dạng phản hồi. Mã trạng thái 200 OK cho biết câu trả lời đã thành công. Câu trả lời cũng bao gồm tiêu đề Kiểu nội dung với giá trị application/json. Người dùng được hướng dẫn phân tích câu trả lời dưới dạng JSON

Điều quan trọng là luôn cung cấp tiêu đề Loại nội dung phù hợp trong phản hồi của bạn. Đặt Loại nội dung thành application/json nếu bạn đang gửi JSON. Nếu là XML, hãy đặt nó thành application/xml. Tiêu đề này hướng dẫn người dùng cách phân tích dữ liệu

Ngoài ra, bạn nên bao gồm một mã trạng thái thích hợp trong câu trả lời của mình. Bạn nên trả lại 200 OK cho mỗi yêu cầu NHẬN thành công. Điều này thông báo cho người dùng rằng yêu cầu của họ đã được xử lý chính xác

Xem xét yêu cầu GET sau đây, lần này là cho một ô tô

$ python -m pip install requests
4

Yêu cầu HTTP này truy vấn API cho xe hơi 

$ python -m pip install requests
07. Đây là phản hồi

$ python -m pip install requests
5

Câu trả lời này cung cấp một đối tượng JSON chứa thông tin về ô tô. Nó không cần phải được bao bọc trong một danh sách bởi vì nó là một đối tượng duy nhất. Câu trả lời này, giống như câu trả lời trước, có mã trạng thái là 200 OK

Đoạn mã dưới đây cung cấp thông tin chi tiết về yêu cầu POST để thêm xe mới

$ python -m pip install requests
6

Yêu cầu POST này bao gồm JSON cho ô tô mới. Nó thay đổi tiêu đề Content-Type thành application/json để API hiểu được loại nội dung của yêu cầu. API sẽ tạo ô tô mới dựa trên JSON

Đây là phản hồi

$ python -m pip install requests
7

Mã trạng thái 201 Đã tạo trong phản hồi này cho người dùng biết rằng một tài nguyên mới đã được tạo. Đối với tất cả các truy vấn POST thành công, hãy sử dụng 201 Đã tạo thay vì 200 OK

Câu trả lời này cũng cung cấp một bản sao của phương tiện mới có id do API tạo. Điều quan trọng là phải bao gồm id trong phản hồi để người dùng có thể thay đổi lại tài nguyên

Dưới đây đưa ra trong yêu cầu PUT;

$ python -m pip install requests
8

Yêu cầu này cập nhật ô tô với tất cả dữ liệu mới bằng cách sử dụng id từ yêu cầu trước đó. PUT, như đã nói trước đây, thay đổi tất cả các trường trên tài nguyên bằng dữ liệu mới. Đây là phản hồi

$ python -m pip install requests
9

Câu trả lời chứa một bản sao của ô tô với thông tin được cập nhật. Một lần nữa, với yêu cầu PUT, bạn phải luôn trả lại toàn bộ tài nguyên. Điều này cũng đúng với yêu cầu PATCH

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
0

Yêu cầu PATCH chỉ thay đổi một phần của tài nguyên. Các trường vin và color trong yêu cầu trước đó sẽ được sửa đổi với các giá trị mới. Đây là câu trả lời của tôi

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
1

Câu trả lời bao gồm một bản sao hoàn chỉnh của ô tô. Chỉ có các trường vin và màu sắc đã được sửa đổi, như bạn có thể thấy

Cuối cùng, hãy xem xét API Python REST của bạn sẽ phản ứng như thế nào khi nhận được yêu cầu XÓA. Đây là một yêu cầu XÓA để thoát khỏi một chiếc xe hơi

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
2

Yêu cầu XÓA này hướng dẫn API xóa ô tô có ID 4. Đây là phản hồi

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
3

Câu trả lời này chỉ bao gồm mã trạng thái 204 Không có nội dung. Mã trạng thái này cho người dùng biết rằng thao tác đã thành công nhưng không có nội dung nào được gửi trong phản hồi. Điều này hợp lý vì ô tô đã bị loại bỏ. Không có lý do gì để cung cấp một bản sao của câu trả lời

Khi mọi thứ diễn ra như dự định, các phản hồi ở trên hoạt động hoàn hảo, nhưng điều gì xảy ra nếu có vấn đề với yêu cầu?

Thiết kế phản hồi lỗi

Luôn có khả năng các truy vấn đến API Python REST của bạn sẽ không thành công. Đó là một cách thực hành tốt để chỉ định cách phản hồi lỗi sẽ xuất hiện. Những câu trả lời này sẽ cung cấp giải thích về vấn đề cũng như mã trạng thái có liên quan. Bạn sẽ thấy một vài trường hợp trong phần này

Để bắt đầu, hãy xem xét yêu cầu sau đối với tài nguyên không tồn tại trong API

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
4

Người dùng cố gắng gửi yêu cầu GET tới /motorcycles, yêu cầu này không tồn tại. API trả về phản hồi sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
5

Câu trả lời này có mã trạng thái 404 Not Found. Ngoài ra, câu trả lời bao gồm một đối tượng JSON với thông báo lỗi chi tiết. Cung cấp cho người dùng một thông báo lỗi có ý nghĩa cung cấp cho họ ngữ cảnh bổ sung cho sự cố

Xem xét phản hồi lỗi sau khi người dùng gửi yêu cầu không chính xác

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
6

Yêu cầu POST này chứa JSON, tuy nhiên, nó không được định dạng đúng. Một dấu ngoặc nhọn đóng [] được bỏ qua ở phần kết luận. Dữ liệu này không thể được xử lý bởi API. Câu trả lời lỗi thông báo cho người dùng về sự cố

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
7

Câu trả lời này chứa thông báo lỗi thông tin cũng như mã trạng thái 400 Yêu cầu không hợp lệ, thông báo cho người dùng rằng yêu cầu phải được khắc phục

Ngay cả khi yêu cầu được hình thành đúng cách, vẫn có nhiều cách khác nhau khiến yêu cầu không chính xác. Trong ví dụ sau, người dùng gửi yêu cầu POST với loại phương tiện không được hỗ trợ

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
8

Người dùng cung cấp XML trong yêu cầu này, nhưng API chỉ chấp nhận JSON. Các câu trả lời API như sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/1"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
9

Mã trạng thái 415 Loại phương tiện không được hỗ trợ được cung cấp trong phản hồi này để cho biết rằng yêu cầu POST chứa loại dữ liệu mà API không chấp nhận. Số lỗi này có ý nghĩa đối với dữ liệu có định dạng không chính xác, nhưng dữ liệu bị lỗi mặc dù ở định dạng phù hợp thì sao?

Trong ví dụ sau, người dùng gửi yêu cầu POST nhưng bao gồm dữ liệu ô tô không khớp với bất kỳ trường dữ liệu nào khác

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
0

Người dùng thêm các trường topSpeed ​​và bảo hành vào JSON trong yêu cầu này. Vì các trường này không được API hỗ trợ nên nó sẽ trả về thông báo lỗi

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
1

Mã trạng thái 422 Thực thể không thể xử lý được bao gồm trong câu trả lời này. Số trạng thái này cho biết rằng không có vấn đề gì với yêu cầu nhưng dữ liệu không chính xác. Dữ liệu đến phải được xác thực thông qua API REST. Nếu người dùng bao gồm dữ liệu trong yêu cầu, API sẽ xác thực dữ liệu đó và thông báo cho người dùng về bất kỳ vấn đề nào

Một trong những chức năng quan trọng nhất của API Python REST là phản hồi các truy vấn, cả thành công và không thành công. Người dùng sẽ có thể tạo ứng dụng xung quanh dịch vụ web của bạn nếu API của bạn dễ sử dụng và cho kết quả chính xác. May mắn thay, một số khung web Python xuất sắc đã loại bỏ những khó khăn khi xử lý các yêu cầu HTTP và phản hồi chúng. Trong phần tiếp theo, bạn sẽ xem xét ba giải pháp phổ biến

Xác thực với API REST của Python

Cho đến nay, bạn đã thấy cách sử dụng các API REST Python mở không yêu cầu bất kỳ ủy quyền nào. Tuy nhiên, nhiều API REST của Python, đặc biệt là những API xử lý dữ liệu nhạy cảm, yêu cầu bạn xác thực trước khi bạn có thể truy cập các điểm cuối cụ thể

Có một vài cơ chế xác thực Python REST API điển hình mà Yêu cầu Python có thể xử lý. Phương pháp đơn giản nhất là sử dụng HTTP Basic Auth để gửi thông tin đăng nhập và mật khẩu của bạn đến điểm cuối có liên quan;

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
2

Lấy mã thông báo truy cập, hoạt động tương đương với tổ hợp tên người dùng/mật khẩu, là một kỹ thuật an toàn hơn; .  

Quản lý mã thông báo truy cập bằng phiên

Khi làm việc với Yêu cầu Python, Đối tượng phiên có ích như một cách để lưu các tham số cần thiết để thực hiện nhiều yêu cầu trong một phiên, chẳng hạn như mã thông báo truy cập. Ngoài ra, việc duy trì cookie phiên có thể cải thiện tốc độ bằng cách loại bỏ nhu cầu bắt đầu kết nối mới cho mỗi yêu cầu

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
3

Làm cách nào để xử lý lỗi HTTP với các yêu cầu Python?

Đoạn mã được cung cấp sẽ giúp bạn hiểu cách tương tác với API trong trường hợp xảy ra lỗi HTTP và khi muốn biết tại sao quá trình dừng xử lý ở đoạn mã còn lại trong chức năng cũng như ở cấp độ gọi

Trước tiên, bạn cần thực hiện yêu cầu ban đầu bằng cách sử dụng thư viện "yêu cầu", sau đó giới thiệu các khối "ngoại trừ" cho từng loại lỗi

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
4

Python và REST. Công cụ tốt nhất cho API Python REST

Trong phần này, bạn sẽ tìm hiểu về ba framework phổ biến của Python để tạo API REST của Python. Mỗi khung đều có ưu điểm và nhược điểm, vì vậy bạn sẽ phải quyết định khung nào phù hợp với mình. Với mục đích đó, API Python REST của mỗi khung sẽ được xem xét trong các phần sau. Tất cả các ví dụ sẽ dành cho API Python REST quản lý một nhóm quốc gia

Các trường sau sẽ có mặt ở mỗi quốc gia

  • Tên đất nước gọi tên
  • Thủ đô của đất nước được gọi là thủ đô
  • Diện tích của đất nước được đo bằng km vuông

Các trường tên, thủ đô, vùng dùng để chứa thông tin về một quốc gia nào đó trên thế giới

Dữ liệu được gửi từ API REST của Python hầu như luôn luôn từ cơ sở dữ liệu. Bài học này không bao gồm kết nối với cơ sở dữ liệu. Dữ liệu của bạn sẽ được lưu trữ trong danh sách Python trong các ví dụ bên dưới. Ví dụ khung Django REST là một ngoại lệ, vì nó sử dụng cơ sở dữ liệu SQLite mà Django tạo ra

Bạn sẽ sử dụng các quốc gia làm điểm cuối chính cho cả ba khuôn khổ để giữ cho mọi thứ nhất quán. Đối với cả ba khung, bạn sẽ sử dụng JSON làm định dạng dữ liệu của mình

1] Khung Django REST

Khung Django REST là một giải pháp thay thế phổ biến khác để tạo API Python REST. Khung Django REST là một plugin Django cung cấp chức năng API Python REST cho một dự án Django

Để làm việc với khung Django REST, bạn sẽ cần một dự án Django. Nếu bạn đã có, bạn có thể sử dụng các mẫu trong khu vực này để nâng cao nó. Nếu không, chỉ cần làm theo để tạo một dự án Django và kết hợp khung Django REST

Để bắt đầu, hãy sử dụng pip để cài đặt Django và djangorestframework

Django và djangorestframework đã được cài đặt. Bây giờ bạn có thể tạo một dự án Django mới bằng công cụ Django-admin. Để bắt đầu dự án của bạn, gõ lệnh sau

Lệnh này tạo một thư mục mới có tên countryapi trong thư mục hiện tại của bạn. Thư mục này chứa tất cả các tệp cần thiết để khởi chạy dự án Django của bạn. Sau đó, bạn sẽ xây dựng một ứng dụng Django mới trong dự án của mình. Django chia chức năng của dự án thành các ứng dụng. Mỗi ứng dụng phụ trách một khía cạnh khác nhau của dự án

Thay đổi thư mục thành countryapi và chạy lệnh sau để xây dựng ứng dụng

Trong dự án của bạn, một thư mục quốc gia mới được tạo. Các tệp cơ sở của ứng dụng được đặt trong thư mục này

Bây giờ bạn đã xây dựng một ứng dụng đang hoạt động, bạn sẽ cần thông báo cho Django về ứng dụng đó. Một thư mục có tên countryapi tồn tại bên cạnh thư mục quốc gia bạn vừa tạo. Thư mục này bao gồm các thông số và cài đặt của dự án của bạn

Mở thư mục countryapi và tìm cài đặt. tập tin py. Để thông báo cho Django về ứng dụng quốc gia và khung Django REST, hãy thêm các dòng sau vào ỨNG DỤNG ĐÃ CÀI ĐẶT

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
5

Một dòng cho khung ứng dụng và nghỉ ngơi của các quốc gia đã được thêm vào

Bạn có thể thắc mắc tại sao khung API Django của Python REST cần được thêm vào danh sách ứng dụng. Vì khung Django REST chỉ là một ứng dụng Django khác, bạn phải đưa nó vào. Các plugin Django là các ứng dụng Django được đóng gói và phân phối mà bất kỳ ai cũng có thể sử dụng

Để xác định các trường dữ liệu của bạn, bạn sẽ cần thiết lập mô hình Django. Cập nhật mô hình. py trong ứng dụng quốc gia với đoạn mã sau

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
6

Một mô hình Quốc gia được xác định bởi mã này. Mô hình này sẽ được Django sử dụng để xây dựng bảng và cột cơ sở dữ liệu cho thông tin quốc gia

Để Django cập nhật cơ sở dữ liệu dựa trên mô hình này, hãy sử dụng các lệnh sau

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
7

Di chuyển Django được sử dụng trong các quy trình này để tạo một bảng mới trong cơ sở dữ liệu

Bảng này ban đầu trống, tuy nhiên, sẽ hữu ích nếu có một số dữ liệu để kiểm tra khung Django REST. Để thực hiện điều này, bạn sẽ sử dụng một vật cố định Django để nhập dữ liệu vào cơ sở dữ liệu

Sao chép và lưu dữ liệu JSON bên dưới vào một tệp có tên là quốc gia. json trong thư mục quốc gia

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
8

Các mục cơ sở dữ liệu của ba quốc gia được bao gồm trong JSON này. Để tải dữ liệu này vào cơ sở dữ liệu, hãy chạy lệnh sau

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
9

Ba hàng được thêm vào cơ sở dữ liệu là kết quả của việc này

Ứng dụng Django của bạn hiện đã sẵn sàng để sử dụng và được điền dữ liệu. Khung Django REST hiện có thể được thêm vào dự án

Khung Django REST chuyển đổi mô hình Django thành JSON để sử dụng trong API REST của Python. Bộ nối tiếp mô hình được sử dụng để làm điều này. Khung công tác Django REST sử dụng trình tuần tự hóa mô hình để cho nó biết cách chuyển đổi một phiên bản mô hình thành JSON và dữ liệu nào cần bao gồm

Bạn sẽ sử dụng mô hình Quốc gia để phát triển bộ nối tiếp của mình. Bắt đầu bằng cách tạo một serializers. py trong ứng dụng quốc gia. Sau đó, chỉnh sửa serializers. py và thêm đoạn mã sau

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
0

CountrySerializer là một serializer phân lớp các serializers khác. ModelSerializer tự động tạo nội dung JSON dựa trên các trường mô hình của Quốc gia. Một lớp con ModelSerializer sẽ bao gồm tất cả các trường từ mô hình Django trong JSON trừ khi có quy định khác. Đặt các trường thành danh sách dữ liệu bạn muốn đưa vào để thay đổi hành vi này

Khung Django REST, giống như Django, sử dụng các khung nhìn để truy vấn dữ liệu từ cơ sở dữ liệu và hiển thị cho người dùng. Bạn có thể phân lớp ModelViewSet của khung công tác Django REST, chứa các chế độ xem mặc định cho các hoạt động API REST API điển hình của Python, thay vì xây dựng các chế độ xem API REST từ đầu

Nguồn hình ảnh

Những hành động này ánh xạ tới các phương thức HTTP thông thường mà bạn mong đợi trong API REST, như bạn có thể thấy. Bạn có thể ghi đè những hành động này trong lớp con của mình hoặc thêm những hành động mới dựa trên yêu cầu API của bạn

Mã cho lớp con ModelViewSet được gọi là CountryViewSet được hiển thị bên dưới. Các chế độ xem cần thiết để quản lý dữ liệu Quốc gia sẽ được tạo bởi lớp này. Bên trong ứng dụng quốc gia, thêm đoạn mã sau vào chế độ xem. py

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
1

Lớp Serializer được đặt thành CountrySerializer và bộ truy vấn [] được đặt thành Quốc gia. các đối tượng. tất cả trong lớp học này. Điều này hướng dẫn khung công tác Django REST sử dụng trình nối tiếp nào và cách truy vấn cơ sở dữ liệu cho tập hợp các chế độ xem này

Sau khi tạo chế độ xem, chúng phải được ánh xạ tới các URL hoặc điểm cuối có liên quan. Khung Django REST cung cấp một DefaultRouter sẽ tự động tạo URL cho ModelViewSet

Trong ứng dụng của quốc gia, hãy tạo một url. py và thêm đoạn mã sau vào nó

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
2

Mã này đăng ký CountryViewSet dưới URL của quốc gia và xây dựng một DefaultRouter. Thao tác này sẽ đặt tất cả các URL của CountryViewSet vào thư mục /countries/

Cuối cùng, bạn phải thay đổi các url cơ sở của dự án. py để thêm tất cả URL của các quốc gia của dự án. Thay đoạn mã sau vào url. py trong thư mục countryapi

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
3

Điều này đặt tất cả các URL trong thư mục /countries/. Bây giờ bạn đã sẵn sàng sử dụng API REST Pyhton dựa trên Django của mình. Để khởi động máy chủ phát triển Django, hãy chạy lệnh sau trong thư mục gốc của countryapi

Máy chủ phát triển đã được bắt đầu. Để nhận danh sách tất cả các quốc gia trong dự án Django của bạn, hãy thực hiện yêu cầu GET tới /countries/

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
4
{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
5

Khung Django REST phản hồi bằng phản hồi JSON chứa ba quốc gia bạn đã chỉ định trước đó. Vì phản hồi ở trên được định dạng để đọc, phản hồi của bạn sẽ khác

Tất cả các điểm cuối API tiêu chuẩn đều có URL được cung cấp bởi DefaultRouter mà bạn đã tạo trong quốc gia/url. py

  • NHẬN /các quốc gia/
  • GET /countries//
  • BÀI ĐĂNG /các quốc gia/
  • PUT /countries//
  • PATCH /countries//
  • DELETE /countries//

Dưới đây là một vài điểm cuối bổ sung để kiểm tra. Tạo một Quốc gia mới trong dự án Django của bạn bằng cách gửi yêu cầu POST tới /countries/

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
6

JSON bạn đã gửi trong yêu cầu được sử dụng để tạo Quốc gia mới. Mã trạng thái Đã tạo 201 và Quốc gia mới được trả về bởi khung Django REST

Bằng cách gửi yêu cầu tới GET /countries/country id>/ với id hiện có, bạn có thể truy cập Quốc gia hiện có. Để có được quốc gia đầu tiên, hãy chạy lệnh sau

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
4
{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
8

Thông tin của Quốc gia đầu tiên được đưa vào phản hồi. Chỉ các truy vấn GET và POST được đề cập trong các ví dụ này. Vui lòng thử nghiệm với các yêu cầu PUT, PATCH và DELETE để khám phá cách bạn có thể quản lý hoàn toàn mô hình của mình thông qua API REST của Python

Như bạn có thể thấy, khung Django REST là một lựa chọn tuyệt vời để tạo API Python REST, đặc biệt nếu bạn đã có dự án Django và muốn thêm API

2] Bình

Flask là một microframework Python có thể được sử dụng để tạo các ứng dụng web và API REST của Python. Flask cung cấp nền tảng vững chắc cho Ứng dụng của bạn đồng thời cho phép bạn đưa ra các quyết định thiết kế khác nhau. Trách nhiệm chính của Flask là xử lý các yêu cầu HTTP và định tuyến chúng đến chức năng ứng dụng có liên quan

Đối với API REST của Python, đây là một ứng dụng Flask mẫu

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
9

Để quản lý danh sách các quốc gia, ứng dụng này xác định điểm cuối API / quốc gia. Nó có thể xử lý hai loại yêu cầu

  • Danh sách các quốc gia được trả về bởi GET /countries
  • POST /countries thêm một quốc gia mới vào danh sách các quốc gia có sẵn

Cài đặt bình với pip sẽ cho phép bạn dùng thử ứng dụng này

Lưu mã trong một tệp có tên là ứng dụng. py sau khi cài đặt bình. Để thực thi ứng dụng Flask này, trước tiên bạn phải đặt biến môi trường FLASK APP thành ứng dụng. py. Điều này hướng dẫn Flask về tệp ứng dụng của bạn được lưu trữ trong

Bên trong thư mục chứa ứng dụng. py, hãy chạy lệnh sau

Trong trình bao hiện tại, điều này đặt FLASK APP thành ứng dụng. py. Bạn cũng có thể thay đổi FLASK ENV thành development để chạy Flask ở chế độ debug

Chế độ gỡ lỗi sẽ khởi động lại ứng dụng sau khi tất cả các mã thay đổi, ngoài việc cung cấp các thông báo lỗi hữu ích. Bạn sẽ phải khởi động lại máy chủ mỗi khi thực hiện thay đổi nếu không sử dụng chế độ gỡ lỗi

Bây giờ bạn đã thiết lập tất cả các biến môi trường của mình, bạn có thể khởi động máy chủ phát triển Flask bằng cách nhập lệnh chạy bình

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
0

Thao tác này sẽ khởi chạy một máy chủ chạy chương trình. truy cập http. //127. 0. 0. 1. 5000/quốc gia trong trình duyệt của bạn và bạn sẽ thấy phản hồi sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
1

Ba quốc gia được xác định khi bắt đầu ứng dụng. py được bao gồm trong phản hồi JSON này. Để chứng minh cách thức hoạt động của nó, hãy xem đoạn mã sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
2

Mã này kết nối các yêu cầu GET với một chức năng trong ứng dụng bằng cách sử dụng @app. get[], một trình trang trí tuyến đường Flask. Flask gọi chức năng được trang trí để xử lý yêu cầu HTTP và trả về phản hồi khi bạn truy cập /countries

Trong đoạn mã trên nhận được. các quốc gia [] chấp nhận danh sách các quốc gia Python và biến nó thành JSON bằng cách sử dụng jsonify []. Trong phản hồi, JSON này được trả về

Hãy xem chức năng add_country[] ngay bây giờ. Hàm này xử lý các yêu cầu POST tới /countries và cho phép bạn thêm một quốc gia mới vào danh sách. Nó nhận thông tin về yêu cầu HTTP hiện tại bằng cách sử dụng đối tượng yêu cầu Flask

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
3

Các hoạt động sau đây được thực hiện bởi chức năng này

  • Để đảm bảo rằng yêu cầu là JSON, hãy sử dụng yêu cầu. is_json
  • Yêu cầu tạo một phiên bản quốc gia mới bằng cách sử dụng get_json[]
  • Xác định id tiếp theo và đặt nó ở quốc gia thích hợp
  • Thêm một quốc gia mới vào danh sách các quốc gia
  • Đáp lại, quốc gia được trả lại cùng với 201. Mã trạng thái đã được tạo
  • Nếu yêu cầu không phải là JSON, nó sẽ trả về thông báo lỗi và mã trạng thái Loại phương tiện không được hỗ trợ 415

add_country[] cũng gọi _find_next_id[] để xác định id cho quốc gia mới

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
4

Hàm tiện ích này chọn tất cả ID quốc gia bằng biểu thức trình tạo và sau đó gọi max[] trên chúng để lấy số lớn nhất. Để sử dụng ID tiếp theo, nó sẽ tăng giá trị này lên một

Curl, tiện ích dòng lệnh cho phép bạn gửi yêu cầu HTTP từ dòng lệnh, có thể được sử dụng để kiểm tra điểm cuối này trong trình bao. Bạn sẽ thêm một quốc gia mới vào danh sách tại đây

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
5
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
6
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
7

Có một số lựa chọn cần lưu ý khi sử dụng lệnh curl

  • Tùy chọn -X chỉ định phương thức HTTP cho yêu cầu
  • Tiêu đề HTTP được thêm vào yêu cầu với tùy chọn -H
  • Tùy chọn -d chỉ định dữ liệu yêu cầu

Curl truyền dữ liệu JSON trong một yêu cầu POST với tiêu đề Kiểu nội dung được đặt thành application/json khi các cài đặt này được đặt. API REST của Python phản hồi với 201 CREATED và JSON cho quốc gia mới được thêm vào

Để xác thực rằng quốc gia mới đã được thêm vào, hãy sử dụng curl để thực hiện yêu cầu GET tới /countries. Nếu bạn không bao gồm -X trong lệnh cuộn tròn của mình, nó sẽ mặc định là yêu cầu GET

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
8
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> response = requests.post[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
9

Điều này trả về toàn bộ danh sách các quốc gia trong hệ thống, bắt đầu từ dưới cùng với mới nhất

Đây chỉ là một ví dụ nhỏ về những gì Flask có thể thực hiện. Điểm cuối cho tất cả các phương thức HTTP khác có thể được thêm vào ứng dụng này. Flask cũng cung cấp một cộng đồng tiện ích mở rộng rộng lớn bổ sung các tính năng như trình kết nối cơ sở dữ liệu, xác thực và xử lý nền cho API REST của Python

3] NHANH CHÓNG

FastAPI là một khung web Python được thiết kế dành riêng cho việc phát triển API. Nó sử dụng các gợi ý kiểu Python và bao gồm hỗ trợ async tích hợp. FastAPI là một API hiệu suất cao được xây dựng dựa trên Starlette và Pydantic

Một ví dụ về API Python REST được tạo bằng FastAPI được hiển thị bên dưới

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
0______51
>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
2
>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
3
>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
4
>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
5

Ứng dụng này sử dụng các tính năng của FastAPI để cung cấp API Python REST cho cùng dữ liệu quốc gia như các ví dụ khác

Có thể dùng thử ứng dụng này bằng cách cài đặt FastAPI với pip

Bạn cũng cần thiết lập uvicorn[standard], đây là máy chủ có thể chạy các ứng dụng FastAPI

Lưu mã ở trên vào tệp có tên ứng dụng. py if you’ve installed both FastApi and uvicorn. To start a development server, type the following command

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
6

The server is up and operating presently. truy cập http. //127. 0. 0. 1. 8000/countries in your browser. FastAPI will react as follows

{
    "userId": 1,
    "title": "Buy milk",
    "completed": false
}
5

A JSON array containing a list of nations is returned by FastAPI. A POST request to /countries. can also be used to add a new nation

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
8
>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
9

You added a new country. You can confirm this with GET /countries

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
0
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
1

FastAPI provides a JSON list that includes the newly added nation

The FastAPI application resembles the Flask application in appearance. FastAPI, like Flask, offers a limited feature set. It does not attempt to cover every facet of web application development. It’s made to help you create APIs that use contemporary Python features

A class called Country, which extends BaseModel, may be found towards the top of app. py. The data structure of the Python REST API is described by the Country class

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
2

This is a Pydantic model in action. In FastAPI, Pydantic models provide certain useful features. To enforce the data type for each field in the class, they employ Python-type annotations. FastAPI can now automatically produce JSON for API endpoints with the necessary data types. FastAPI may also use it to validate incoming JSON

As there’s a lot going on in the first line, it’s helpful to highlight it

This line contains the variable country id, which holds an integer representing the Country’s ID. It modifies the behavior of country id with Pydantic’s Field function. Các đối số từ khóa nhà máy và bí danh mặc định được chuyển đến Trường trong ví dụ này

Đối số mặc định của nhà máy được đặt thành _find next_id[]. Khi một Quốc gia mới được tạo, đối số này xác định một chức năng để chạy. Id quốc gia sẽ được phân bổ giá trị trả về

bí danh, đối số thứ hai, được đặt thành id. Điều này hướng dẫn FastAPI xuất khóa "id" trong JSON thay vì "id quốc gia"

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
3

Bạn cũng có thể sử dụng id khi tạo Quốc gia mới với bí danh này. Điều này có thể nhìn thấy trong danh sách các quốc gia

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
3

Danh sách này cung cấp ba phiên bản Quốc gia cho ba quốc gia đầu tiên của API. Các mô hình Pydantic bao gồm rất nhiều khả năng thú vị và giúp FastAPI dễ dàng phân tích cú pháp đầu vào JSON

Hãy xem hai chức năng API của ứng dụng ngay bây giờ. Đối với các truy vấn GET tới /countries, phương thức đầu tiên, lấy các quốc gia[], đưa ra một danh sách các quốc gia

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
4

FastAPI sẽ tạo JSON dựa trên các trường của mô hình Pydantic và thiết lập kiểu dữ liệu JSON phù hợp dựa trên gợi ý kiểu Python

Khi bạn gửi yêu cầu POST tới /countries, mô hình Pydantic cũng giúp. Quốc gia tham số có chú thích Quốc gia, như bạn có thể thấy trong phương thức API thứ hai bên dưới

>>> import requests
>>> import json
>>> api_url = "//jsonplaceholder.typicode.com/todos"
>>> todo = {"userId": 1, "title": "Buy milk", "completed": False}
>>> headers =  {"Content-Type":"application/json"}
>>> response = requests.post[api_url, data=json.dumps[todo], headers=headers]
>>> response.json[]
{'userId': 1, 'title': 'Buy milk', 'completed': False, 'id': 201}

>>> response.status_code
201
5

FastAPI sẽ xác thực JSON đến theo Quốc gia nếu có loại chú thích này. FastAPI sẽ trả về lỗi nếu không khớp. Bạn có thể kiểm tra điều này bằng cách gửi một yêu cầu JSON không khớp với mô hình Pydantic

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
7
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
8
>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.delete[api_url]
>>> response.json[]
{}

>>> response.status_code
200
9

FastAPI đã cung cấp phản hồi với mã trạng thái 422 Thực thể không thể xử lý và thông tin chi tiết về lỗi do JSON trong lệnh gọi này thiếu một giá trị cho khu vực. Mô hình Pydantic làm cho việc xác thực này trở nên khả thi

Đây chỉ đơn giản là một phần nhỏ của những gì FastAPI có thể thực hiện. FastAPI đáng để xem xét cho API Python REST trong tương lai của bạn vì hiệu suất tuyệt vời và các tính năng hiện đại như chức năng không đồng bộ và tài liệu tự động

Làm cách nào để tạo các yêu cầu API REST Python mạnh mẽ?

Cú pháp rõ ràng và đơn giản của Python khiến nó trở thành một ngôn ngữ tuyệt vời để tương tác với các API REST của Python và ở dạng Python thực sự, một mô-đun có tên là Yêu cầu đã được tạo riêng để cung cấp tính năng đó. Yêu cầu Python là một công cụ mạnh mẽ cho phép bạn thực hiện các yêu cầu HTTP tới bất kỳ API nào trên thế giới bằng cách sử dụng vẻ đẹp đơn giản của Python

Vai trò của HTTP, API và REST

Giao diện lập trình ứng dụng [API] là một dịch vụ web cung cấp quyền truy cập vào một số dữ liệu và chức năng mà các chương trình khác có thể sử dụng – và đôi khi thay đổi – bằng cách sử dụng các giao thức HTTP thông thường, tương tự như của trang web. Tại sao? . API có thể dễ dàng tích hợp vào nhiều ứng dụng. Phong cách kiến ​​trúc nổi bật nhất của API cho các dịch vụ web được cho là REST. Nó là một tập hợp các tiêu chuẩn nhằm làm cho giao tiếp máy khách-máy chủ dễ dàng hơn. API REST của Python giúp truy cập dữ liệu dễ dàng hơn và hợp lý hơn

Yêu cầu

Yêu cầu là những gì bạn thực hiện khi muốn tương tác với dữ liệu bằng API REST của Python. Một yêu cầu bao gồm các yếu tố sau

điểm cuối. Đó là URL chỉ định loại dữ liệu mà bạn đang tương tác. URL điểm cuối được liên kết với một tài nguyên cụ thể trong API, tương tự như cách URL trang web được liên kết với một trang

Phương pháp. Nó mô tả cách bạn xử lý tài nguyên tại điểm cuối đã chỉ định. API REST của Python cung cấp các cách để kích hoạt các khả năng Tạo, Đọc, Cập nhật và Xóa [CRUD] hoàn chỉnh. Sau đây là các phương thức phổ biến nhất được cung cấp bởi hầu hết các API REST của Python

  • LẤY. Khôi phục dữ liệu
  • ĐẶT. Thay thế dữ liệu
  • BƯU KIỆN. Tạo dữ liệu
  • XÓA BỎ. Xóa dữ liệu

Dữ liệu. Nếu bạn đang sử dụng phương thức API REST của Python liên quan đến việc sửa đổi dữ liệu, thì bạn phải gửi tải trọng dữ liệu với yêu cầu chứa bất kỳ dữ liệu nào sẽ được tạo hoặc cập nhật

tiêu đề. Bất kỳ siêu dữ liệu nào phải được cung cấp cùng với yêu cầu, chẳng hạn như mã thông báo xác thực, loại nội dung sẽ được trả về và bất kỳ quy tắc bộ đệm nào, đều được bao gồm trong tiêu đề

Phản hồi

Khi bạn đưa ra yêu cầu, API sẽ phản hồi bằng phản hồi. Nó sẽ có một tiêu đề phản hồi và, nếu có, dữ liệu phản hồi, giống như yêu cầu. Tiêu đề phản hồi chứa siêu dữ liệu cần thiết về câu trả lời, trong khi dữ liệu phản hồi chứa phản hồi thực tế mà bạn đã yêu cầu. Đây có thể là bất kỳ loại dữ liệu nào, vì nó hoàn toàn phụ thuộc vào API. Văn bản thường được gửi dưới dạng JSON, mặc dù các ngôn ngữ đánh dấu khác, chẳng hạn như XML, cũng được hỗ trợ

Hãy xem xét một yêu cầu đơn giản và câu trả lời. Chúng tôi sẽ sử dụng curl trong thiết bị đầu cuối để gửi yêu cầu GET tới Open Notify API. Đây là một API đơn giản nhưng hữu ích chứa dữ liệu về các phi hành gia hiện đang ở trong không gian

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
0

Bạn sẽ nhận được phản hồi JSON với thông tin về các phi hành gia này;

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
1

Cách sử dụng các yêu cầu Python với API REST

Bây giờ, hãy xem những gì cần thiết để sử dụng Yêu cầu Python để giao tiếp với API REST. Đầu tiên, bạn sẽ cần phần mềm thiết yếu; . Sau đó, đi đến dòng lệnh và sử dụng pip để cài đặt mô-đun yêu cầu python

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
2

Bây giờ bạn đã sẵn sàng để bắt đầu tương tác với API REST bằng các Yêu cầu Python, hãy đảm bảo bạn nhập mô-đun Yêu cầu vào bất kỳ tập lệnh nào bạn muốn sử dụng nó trong

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
3

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

Phương thức GET được sử dụng để truy xuất dữ liệu từ API REST của Python cho một tài nguyên được chỉ định;

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
4

Đối tượng phản hồi chứa tất cả thông tin do máy chủ cung cấp để đáp ứng yêu cầu GET của bạn, bao gồm các tiêu đề và tải trọng dữ liệu. Khi mẫu mã này xuất đối tượng phản hồi tới bàn điều khiển, nó chỉ cung cấp tên lớp của đối tượng và mã trạng thái nhận được theo yêu cầu [thêm về mã trạng thái sau]

Mặc dù thông tin này có thể quan trọng, nhưng nhiều khả năng bạn sẽ quan tâm đến nội dung của yêu cầu hơn, nội dung này có thể được truy xuất theo nhiều cách khác nhau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
5

Làm cách nào để sử dụng tham số truy vấn?

Các truy vấn có thể được sử dụng để lọc dữ liệu do API trả về và chúng được cung cấp dưới dạng tham số truy vấn cho URL điểm cuối. Điều này được xử lý bởi tùy chọn params trong Yêu cầu Python, chấp nhận một đối tượng từ điển;

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
6

Lệnh in sẽ cung cấp đầu ra sau

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
7

Làm cách nào để tạo và sửa đổi dữ liệu bằng POST và PUT?

Đối số dữ liệu, giống như các tham số truy vấn, có thể được sử dụng để thêm dữ liệu liên quan cho các yêu cầu phương thức PUT và POST

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
8

Làm cách nào để truy cập các tiêu đề REST?

Tiêu đề cũng có thể được sử dụng để lấy siêu dữ liệu từ phản hồi. Ví dụ: để kiểm tra ngày trả lời. Bạn chỉ có thể xác định nó bằng thuộc tính 'tiêu đề' như được hiển thị bên dưới

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> response = requests.get[api_url]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'illo est .. aut', 'completed': True}

>>> todo = {"userId": 1, "title": "Wash car", "completed": True}
>>> response = requests.put[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'title': 'Wash car', 'completed': True, 'id': 10}

>>> response.status_code
200
9

Điều đó bao gồm các nguyên tắc cơ bản của API mở. Tuy nhiên, nhiều API không có sẵn cho công chúng. Hãy xem cách xác thực các API REST của Python cho chúng

Làm cách nào để xác thực API Python REST?

Cho đến nay, bạn đã học cách giao tiếp với các API REST mở không yêu cầu xác thực. Tuy nhiên, nhiều API REST yêu cầu bạn phải đăng nhập trước khi bạn có thể truy cập các điểm cuối cụ thể, đặc biệt nếu chúng xử lý dữ liệu nhạy cảm

Có một số cơ chế xác thực điển hình cho API REST của Python mà Yêu cầu Python có thể xử lý. Phương pháp đơn giản nhất là cung cấp thông tin đăng nhập và mật khẩu của bạn dưới dạng HTTP Basic Auth cho điểm cuối có liên quan;

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
0

Một tùy chọn an toàn hơn là lấy mã thông báo truy cập, đóng vai trò tương đương với tổ hợp tên người dùng/mật khẩu; . Chúng tôi sử dụng OAuth ba chân tại Nylas để cung cấp mã thông báo truy cập cho các tài khoản người dùng bị giới hạn trong phạm vi mô tả dữ liệu và chức năng chính xác có thể được truy cập

Khi bạn có mã thông báo truy cập, bạn có thể đưa nó vào tiêu đề yêu cầu dưới dạng mã thông báo mang. đây là cách tiếp cận an toàn nhất để xác thực API REST bằng cách sử dụng mã thông báo truy cập

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
1

Các kỹ thuật khác để xác thực API REST của Python bao gồm thông báo, Kerberos, NTLM và AuthBase. Việc sử dụng những thứ này được xác định bởi các cân nhắc kiến ​​trúc của nhà sản xuất API REST

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

Các đối tượng phiên rất hữu ích khi xử lý các Yêu cầu Python như một cơ chế để duy trì các tham số cần thiết cho nhiều yêu cầu trong một phiên, chẳng hạn như mã thông báo truy cập. Ngoài ra, việc kiểm soát cookie phiên có thể giúp tăng tốc độ đáng kể vì bạn không phải bắt đầu một kết nối mới cho mỗi yêu cầu

>>> response.status_code
200

>>> response.headers["Content-Type"]
'application/json; charset=utf-8'
3

Làm cách nào để xử lý lỗi HTTP với các yêu cầu Python?

Các lệnh gọi API có thể không phải lúc nào cũng diễn ra như mong đợi và có nhiều lý do khiến các yêu cầu API có thể không thành công, đó có thể là lỗi của máy chủ hoặc máy khách. Để làm cho mã của bạn linh hoạt hơn, nếu bạn định sử dụng API REST, bạn phải học cách quản lý các lỗi mà chúng báo cáo khi xảy ra sự cố. Phần này sẽ hướng dẫn bạn tất cả những gì bạn cần biết về cách xử lý lỗi HTTP bằng Yêu cầu Python

Khái niệm cơ bản về mã trạng thái HTTP

Trước khi đi sâu vào các chi tiết cụ thể của Yêu cầu Python, trước tiên chúng ta phải hiểu mã trạng thái HTTP là gì và chúng liên quan như thế nào đến các lỗi mà bạn có thể gặp phải

Các mã trạng thái được phân loại thành một trong năm nhóm

  • 1xx Thông tin. Cho biết rằng một yêu cầu đã được nhận và khách hàng sẽ tiếp tục yêu cầu tải trọng dữ liệu. Khi xử lý các Yêu cầu Python, có lẽ bạn sẽ không phải bận tâm về các mã trạng thái này
  • 2xx thành công. Cho biết rằng một hành động được yêu cầu đã được nhận, hiểu và chấp nhận. Bạn có thể sử dụng các mã này để xác thực sự hiện diện của dữ liệu trước khi hành động trên đó
  • Chuyển hướng 3xx. Cho biết rằng khách hàng phải thực hiện một hành động bổ sung, chẳng hạn như truy cập tài nguyên thông qua proxy hoặc điểm cuối khác, để hoàn thành yêu cầu. Để đối phó với những mã này, bạn có thể cần tạo thêm yêu cầu hoặc thay đổi những yêu cầu hiện có của mình
  • Lỗi máy khách 4xx. Cho biết sự cố với ứng dụng khách, chẳng hạn như thiếu quyền, quyền truy cập bị hạn chế, kỹ thuật bị cấm hoặc nỗ lực truy cập tài nguyên không tồn tại. Điều này thường chỉ ra sự cố với cấu hình của ứng dụng khách
  • Lỗi máy chủ 5xx. Mã lỗi này cho biết đã xảy ra sự cố với máy chủ cung cấp API. Có một số loại sự cố máy chủ và chúng thường cần sự can thiệp của nhà cung cấp API

Làm cách nào để kiểm tra lỗi HTTP với các yêu cầu Python?

Phần tử mã trạng thái của các đối tượng phản hồi có thể được sử dụng để kiểm tra mọi sự cố do API báo cáo. Ví dụ sau đây minh họa cách sử dụng thuộc tính này để kiểm tra mã trạng thái HTTP thành công và 404 không tìm thấy, mặc dù định dạng này có thể được sử dụng cho bất kỳ mã trạng thái HTTP nào

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
3

Để kiểm tra điều này, hãy xóa chữ cái cuối cùng khỏi điểm cuối URL;

Nếu bạn muốn Yêu cầu đưa ra một ngoại lệ cho tất cả các mã lỗi [4xx và 5xx], hãy sử dụng phương thức tăng cho status[] và nắm bắt các sự cố cụ thể với các ngoại lệ tích hợp sẵn của Yêu cầu. Mẫu mã tiếp theo thực hiện tương tự như mẫu trước

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
4

Quá NhiềuChuyển hướng. Sự cần thiết phải chuyển hướng đến một trang web khác cho tài nguyên mà bạn đang yêu cầu thường được báo hiệu bằng mã trạng thái HTTP 3xx. Điều này có thể dẫn đến vòng lặp chuyển hướng vô tận trong một số trường hợp. Để giải quyết vấn đề này, hãy sử dụng lỗi TooManyRedirects trong mô-đun Yêu cầu Python. Để khắc phục sự cố này, có thể URL bạn đang sử dụng để truy cập tài nguyên không chính xác và phải được sửa đổi

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
5

Bạn có thể chỉ định số lần chuyển hướng tối đa bằng các tùy chọn yêu cầu

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
6

Ngoài ra, bạn có thể hủy kích hoạt chuyển hướng hoàn toàn trong tùy chọn yêu cầu của mình

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
7

Lỗi kết nối. Cho đến nay, chúng tôi chỉ xem xét các lỗi do máy chủ trực tiếp tạo ra. Điều gì sẽ xảy ra nếu bạn hoàn toàn không nhận được phản hồi từ máy chủ? . Khi ứng dụng khách của bạn không thể kết nối với máy chủ, Yêu cầu Python sẽ đưa ra ngoại lệ ConnectionError

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
8

Loại lỗi này có thể là tạm thời hoặc vĩnh viễn. Trong trường hợp đầu tiên, bạn nên thử lại yêu cầu để kiểm tra xem kết quả có khác không. Trong trường hợp thứ hai, hãy đảm bảo rằng bạn đã chuẩn bị sẵn sàng để đối phó với tình trạng không thể lấy dữ liệu từ API kéo dài, điều này có thể khiến bạn phải điều tra các khó khăn về kết nối của chính mình

Hết giờ. Sự cố hết thời gian xảy ra khi bạn có thể kết nối với máy chủ API nhưng nó không hoàn thành yêu cầu trong giới hạn thời gian. Yêu cầu Python, giống như các sự cố trước đây mà chúng tôi đã xem xét, có thể xử lý lỗi này bằng cách sử dụng ngoại lệ Hết thời gian chờ

>>> import requests
>>> api_url = "//jsonplaceholder.typicode.com/todos/10"
>>> todo = {"title": "Mow lawn"}
>>> response = requests.patch[api_url, json=todo]
>>> response.json[]
{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}

>>> response.status_code
200
9

Trong trường hợp này, thời gian chờ được đặt thành một phần giây bằng cách sử dụng các tham số yêu cầu. Bởi vì hầu hết các API không thể phản ứng nhanh như vậy, mã sẽ đưa ra lỗi hết thời gian chờ. Bạn có thể tránh sự cố này bằng cách kéo dài thời gian chờ của tập lệnh, tối ưu hóa yêu cầu của bạn để nhỏ hơn hoặc triển khai vòng lặp thử lại cho yêu cầu. Điều này cũng có thể chỉ ra sự cố với nhà cung cấp API. Một tùy chọn cuối cùng là sử dụng lệnh gọi API không đồng bộ để giữ cho mã của bạn không bị đóng băng khi chờ câu trả lời lớn hơn

Làm cách nào để tạo yêu cầu API mạnh mẽ?

Như chúng ta đã thấy, mô-đun Yêu cầu xử lý khéo léo các sự cố yêu cầu API điển hình bằng cách tận dụng khả năng xử lý ngoại lệ của Python. Khi chúng tôi kết hợp tất cả các lỗi mà chúng tôi đã thảo luận, chúng tôi có một giải pháp khá đơn giản để xử lý bất kỳ lỗi yêu cầu HTTP nào xảy ra theo cách của chúng tôi

$ python -m pip install requests
00

Sự kết luận

Bài viết này hướng dẫn bạn về API REST của Python. Nó cung cấp kiến ​​thức chuyên sâu về các khái niệm đằng sau mỗi bước để giúp bạn hiểu và thực hiện chúng một cách hiệu quả. Xây dựng kết nối API REST của Python theo cách thủ công và sử dụng lệnh gọi API có thể là một thách thức đặc biệt đối với người mới bắt đầu và đây là lúc Hevo tiết kiệm thời gian

Ghé thăm trang web của chúng tôi để khám phá Hevo

Hevo Data cung cấp cho người dùng một nền tảng đơn giản hơn để tích hợp dữ liệu từ hơn 100 nguồn để Phân tích. Đó là Đường ống dữ liệu không mã có thể giúp bạn kết hợp dữ liệu từ nhiều nguồn. Bạn có thể sử dụng nó để truyền dữ liệu từ nhiều nguồn dữ liệu vào Kho dữ liệu, Cơ sở dữ liệu hoặc đích bạn chọn. Nó cung cấp cho bạn một giải pháp nhất quán và đáng tin cậy để quản lý dữ liệu trong thời gian thực, đảm bảo rằng bạn luôn có dữ liệu sẵn sàng cho Phân tích ở đích mong muốn của mình

Bạn muốn thử Hevo? . Bạn cũng có thể xem giá cả cạnh tranh nhất của chúng tôi sẽ giúp bạn chọn kế hoạch phù hợp với nhu cầu kinh doanh của bạn

Python có thể sử dụng API REST không?

Một trong những cách phổ biến nhất để xây dựng API là kiểu kiến ​​trúc REST. Python cung cấp một số công cụ tuyệt vời không chỉ để lấy dữ liệu từ API REST mà còn để xây dựng API REST Python của riêng bạn .

Chúng tôi có thể tạo API bằng Python không?

Python có một số khung web có thể được sử dụng để tạo các ứng dụng web và API. Nổi tiếng nhất là Django, một khung có cấu trúc dự án được thiết lập và bao gồm nhiều công cụ tích hợp

Chủ Đề