Hướng dẫn hoàn chỉnh về API Rest với Python và Flask
Kết nối với chúng tôi

Tìm kiếm theo chiều dọc Plato

Dữ Liệu Lớn.

Hướng dẫn hoàn chỉnh về API Rest với Python và Flask

Bài báo này đã được xuất bản như một phần của Blogathon Khoa học Dữ liệu. Xin chào, tôi hy vọng bạn vẫn ổn. Tôi muốn chào mừng bạn đến với một bài viết hay về cách tạo API REST bằng Flask. Trong một trong những bài viết trước của chúng tôi, chúng ta đã tìm hiểu những kiến ​​thức cơ bản về Flask và cách thiết lập nó. Chúng tôi đã tạo ra một […]

Các bài viết Hướng dẫn hoàn chỉnh về API Rest với Python và Flask xuất hiện đầu tiên trên Phân tích Vidhya.

Bài báo này đã được xuất bản như một phần của Blogathon Khoa học Dữ liệu.

, Tôi hy vọng bạn ổn. Tôi muốn chào mừng bạn đến với một bài viết hay về cách tạo API REST bằng Flask. Trong một trong những bài viết trước của chúng tôi, chúng ta đã tìm hiểu những kiến ​​thức cơ bản về Flask và cách thiết lập nó. Chúng tôi đã thực hiện một dự án máy học cuối hoàn chỉnh với Flask. Bạn có thể truy cập bài viết trước từ nhấn vào đây.. Nhưng mọi người có nhiều nghi ngờ về API REST, làm cách nào chúng ta có thể tạo nó cho một trường hợp sử dụng khác hoặc thực hiện một số tác vụ như xác thực, chuyển đổi mã, v.v. Trong hướng dẫn này, chúng ta sẽ thực hành tìm hiểu cách tạo API Flask và làm việc với các API REST của chúng tôi quyền lực hơn. Trước khi bắt đầu, tôi cho rằng bạn đã quen với Python và Flask cơ bản.

Mục lục

  1. Giới thiệu ngắn gọn về API REST
  2. Tạo API REST đầu tiên của bạn bằng Flask
  3. Yêu cầu HTTP khác với API REST
  4. Sử dụng Trình trang trí trong API REST
  5. Cách bảo mật API bình
  6. Cách bật tính năng theo dõi trên API Flask
  7. Bài kiểm tra Viết đơn vị cho API REST
  8. Ghi chú kết thúc

REST API (Giao diện lập trình ứng dụng) là gì

REST API là viết tắt của Restful API cho phép tích hợp các ứng dụng hoặc tương tác với các dịch vụ web RESTful. Nó hiện đang phát triển như một phương pháp phổ biến nhất để kết nối các thành phần trong một kiến ​​trúc microservice. API sẽ cho phép bạn lấy hoặc gửi dữ liệu đến một trang web và thực hiện một số hành động để hoàn thành nhiệm vụ của bạn trên một dịch vụ web. Mỗi trang web sử dụng các loại API khác nhau, chẳng hạn như các trang web giao dịch trên thị trường chứng khoán tích hợp với Sensex hoặc Nifty để có được mức giá hiện tại và mức tăng giảm. Ứng dụng đặt vé sử dụng một API cổng duy nhất mong muốn để giữ dữ liệu cập nhật ở giao diện quen thuộc.

Tạo API REST đầu tiên của bạn

chúng ta hãy chuyển sang trình soạn thảo mã. Bạn có thể sử dụng bất kỳ IDE Python nào mà bạn cảm thấy thoải mái. Chúng tôi đang tạo API Hello world, cho biết rằng nếu bạn nhấn nhận được yêu cầu trên đó, bạn sẽ nhận được phản hồi JSON vì API luôn cung cấp phản hồi kiểu JSON. Tôi hy vọng bạn đã cài đặt Flask; nếu không, hãy sử dụng lệnh PIP và cài đặt nó bằng đoạn mã dưới đây. Tạo một tệp python mới và nhập mã bên dưới.

pip cài đặt bình pip cài đặt bình-yên
from flask import Flask from flask_restful import Resource, Api app = Flask (__ name__) api = Api (app) class Helloworld (Resource): def __init __ (self): pass def get (self): return {"Hello": "World" } api.add_resource (Helloworld, '/') if __name__ == '__main__': app.run (debug = True)

Flask-Restful là gì?

Phần còn lại của Flask định nghĩa lớp tài nguyên, lớp này chứa các phương thức cho mỗi phương thức HTTP. Tên phương thức phải giống với phương thức HTTP tương ứng của nó và được viết bằng chữ thường. Bạn có thể quan sát điều này trong đoạn mã trên. Tuy nhiên, các phương pháp này không có trình trang trí tuyến đường, vì vậy chúng dựa trên các tuyến đường tài nguyên. Bất kỳ lớp nào chúng ta định nghĩa, chúng ta xác định đường đến nó bằng cách sử dụng phương thức thêm tài nguyên và trên đường nào chúng ta phải gọi nó.

Giải thích ~ Trong đoạn mã trên, trước tiên chúng tôi tải các lớp cha bắt buộc, sau đó khởi tạo ứng dụng và API của chúng tôi. Sau đó, chúng tôi tạo một khóa học và chúng tôi đang thực hiện một yêu cầu GET nêu rõ nếu bất kỳ ai truy cập vào lớp học này, thì người đó sẽ nhận được Hello world dưới dạng phản hồi ở định dạng JSON. Để bật một URL cụ thể, chúng tôi sử dụng phương thức thêm tài nguyên và định tuyến nó đến dấu gạch chéo mặc định. Để chạy tệp này, bạn có thể sử dụng công cụ POSTMAN, một công cụ bảo trì API, để tạo, kiểm tra và quản lý các API. Bạn cũng có thể sử dụng mô-đun yêu cầu để thử API này bằng cách sử dụng mã bên dưới. Đầu tiên, hãy chạy tệp ở trên, tệp này sẽ cung cấp cho bạn URL máy chủ cục bộ và trong một dấu nhắc lệnh khác, hãy chạy tệp mã bên dưới.

nhập yêu cầu url = "http://127.0.0.1:5000/" response = request.get (url = url) print (response.text)
Đầu ra | API với Python và Flask

Hiểu yêu cầu HTTP thông qua Flask RESTApi

Bây giờ chúng ta đã làm quen với REST API. Dưới tiêu đề này, chúng ta sẽ khám phá các phương thức HTTP khác nhau bằng cách sử dụng API REST, nơi chúng ta sẽ xác định một danh sách sẽ lưu trữ tất cả dữ liệu thu được từ máy chủ dưới dạng từ điển (đối tượng JSON). Điều này quan trọng vì chúng tôi có các API khác nhau trong các dự án để lấy dữ liệu đăng dữ liệu nhưng dữ liệu ở một nơi khác.

Ở đây chúng tôi đang tạo một API nơi chúng tôi sẽ tạo 3 phương thức HTTP có tên GET, POST và DELETE, nơi chúng tôi sẽ tạo một URL tùy chỉnh và nói rằng khi bạn yêu cầu phương thức POST, thì nó sẽ lấy Tên làm đầu vào và khi nhấn phương thức GET, sẽ cung cấp lại Tên đó và Khi xóa, chúng tôi sẽ xóa Tên đó nếu nó hiện diện và truy cập lại rằng nó sẽ cung cấp cho chúng tôi NULL. Tạo một tệp và viết mã dưới đây.

from flask import Flask from flask_restful import Resource, Api app = Flask (__ name__) api = Api (app) data = [] class People (Resource): def get (self): for x in data: if x ['Data'] == name: return x return {'Dữ liệu': Không có} def post (self, name): temp = {'Data': name} data.append (temp) return temp def delete (self): for ind, x in enumerate (data): if x ['Data'] == name: temp = data.pop (ind) return {'Lưu ý': 'Đã xóa'} api.add_resource (Mọi người, '/ Tên /') if __name__ == '__main__': app.run (gỡ lỗi = Đúng)

Mở công cụ API POSTMAN và nhấn vào từng yêu cầu phương thức HTTP. Đầu tiên, khi chúng tôi sử dụng yêu cầu bài đăng bằng Tên, nó sẽ cung cấp cho chúng tôi một cái tên. Khi nhận được yêu cầu, chúng tôi lấy lại được Tên. Nó bị xóa khi xóa và khi bạn cố lấy lại nó, nó sẽ cho bạn là NULL. Quan sát kết quả bên dưới.

Hiểu HTTP
Phản hồi của HTTP | API với Python và Flask
API với Python và Flask

Cách sử dụng Decorator trong Flask REST API

Chúng tôi sử dụng trình trang trí với API để theo dõi địa chỉ IP, cookie, v.v. Vì vậy, trong tiêu đề này, chúng tôi sẽ tìm hiểu cách tận dụng API bình với trình trang trí. Decorator là một hàm nhận một hàm khác làm đối số và trả về một hàm khác. Bạn cũng có thể hiểu nó là một hàm cung cấp một số chức năng bổ sung cho hàm hiện có mà không cần thay đổi, chỉnh sửa hàm hiện tại.

Ở đây chúng tôi tạo một tệp mới và tôi sẽ chỉ cho bạn bằng cách tạo hai trình trang trí. Vì vậy, trong phần đầu tiên, chúng ta đang tạo hàm thời gian bên ngoài trả về thời gian thực thi mã. Chúng tôi nhập trình trang trí bọc được áp dụng cho chức năng trình bao bọc từ chức năng mô-đun (mô-đun tiêu chuẩn cho các chức năng python bậc cao hơn). Nó cập nhật hàm được bọc bằng cách sao chép tất cả các đối số của nó.

từ bình nhập khẩu Bình

từ Tài nguyên nhập khẩu flask_restful, Api

nhập ngày giờ

từ yêu cầu nhập khẩu bình

từ kết thúc nhập functools

ứng dụng = Bình (__ tên__)

api = Api (ứng dụng)

thời gian xác định (chức năng = Không có):

@wraps (hàm)

trình bao bọc def (* args, ** kwargs):

s = datetime.datetime.now ()

_ = function (* args, ** kwargs)

e = datetime.datetime.now ()

print (“Thời gian thực thi: {}“ .format (es))

trở về _

trả lại trình bao bọc

lớp HelloWorld (Tài nguyên):

@màn hình

def get (tự):

return {'hello': 'world'}

api.add_resource (HelloWorld, '/')

nếu __name__ == '__main__':

app.run (gỡ lỗi = True)


Trang trí trong Công cụ bình

Chúng tôi tạo trình trang trí thứ hai để giám sát cookie và địa chỉ IP, vì vậy hãy tạo chức năng bên dưới. Thay vì thêm trình trang trí thời gian vào chức năng hello world, hãy thêm trình trang trí màn hình và chạy mã.

def monitor (function = None): @wraps (function) def wrapper (* args, ** kwargs): _ = function (* args, ** kwargs) print ("Ip Address: {}" .format (request.remote_user )) print ("Cookie: {}" .format (request.cookies)) print (request.user_agent) return _ return wrapper

Cách làm cho API Flask an toàn hơn với Xác thực cơ bản

Khi chúng tôi thiết kế API, chúng tôi cũng nên quan tâm đến bảo mật vì nhiều người sẽ truy cập vào nó. Điều gì sẽ xảy ra nếu bạn chỉ muốn những người được ủy quyền truy cập API vì nó có thể chứa một số dữ liệu bí mật giữa một số bên để chúng tôi có thể làm điều đó? Sử dụng xác thực cơ bản của Flask. Bạn cần cài đặt mô-đun bình này bằng lệnh pip.

pip cài đặt flask-httpauth

Chúng tôi đang xây dựng một API và xác định từ điển Dữ liệu người dùng, chứa tên người dùng và mật khẩu. Khi bạn làm việc trong các ca sử dụng thời gian thực, bạn chấp nhận tên người dùng và mật khẩu thông qua tệp cấu hình hoặc từ cơ sở dữ liệu. Đầu tiên, chúng tôi tạo một hàm chính để khớp với tên người dùng và mật khẩu và phương thức GET cho biết rằng bất kỳ ai truy cập vào API này để không đăng nhập, chúng tôi không thể truy cập dữ liệu.

from flask import Flask from flask_restful import Resource, Api from flask_httpauth import HTTPBasicAuth app = Flask (__ name__) api = Api (app, prefix = "/ api / v1") auth = HTTPBasicAuth () USER_DATA = {"admin": "SuperSecretPwd" } #route to verify the password @ auth.verify_password def verify (tên người dùng, mật khẩu): nếu không (tên người dùng và mật khẩu): return False return USER_DATA.get (tên người dùng) == password class PrivateResource (Resource): @ auth.login_required def get (self): return {"How's the Josh": "High"} api.add_resource (PrivateResource, '/ private') if __name__ == '__main__': app.run (debug = True)

Khi chúng tôi chạy tệp ở trên bằng POSTMAN, chúng tôi cố gắng lấy dữ liệu mà không cần đăng nhập để cấp cho bạn quyền truy cập trái phép.

Xác thực cơ bản

Bây giờ đi tới ủy quyền và nhấp vào Ủy quyền cơ bản. Nhập tên người dùng và mật khẩu bạn đã sử dụng, sau đó nhấn yêu cầu GET để nhận được kết quả mong muốn.

API với Python và Flask

Đây là cách bạn có thể bảo mật API Flask của mình. Để biết thêm về Ủy quyền cơ bản của Flask, bạn có thể truy cập điều này blog.

Cách bật tính năng theo dõi trên API bình

Chúng tôi đã học cách có thể bảo mật API của mình khỏi bị đăng nhập trái phép, nhưng điều gì sẽ xảy ra nếu chúng tôi cũng muốn biết vị trí (điểm vĩ độ và kinh độ), địa chỉ IP, tên máy chủ, chẳng hạn như thông tin chi tiết về một người đang truy cập API của chúng tôi để chúng tôi có thể định cấu hình ứng dụng Theo dõi bình cơ bản với API REST của chúng tôi. Đầu tiên, cài đặt gói theo dõi bình bằng PIP Command.

pip cài đặt flask-theo dõi-sử dụng
from flask import Flask, g app = Flask (__ name__) app.config ['TRACK_USAGE_USE_FREEGEOIP'] = False app.config ['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'include' from flask_track_usage_usage import TrackUsage from flask_track_usage.nterstorage .output nhập OutputWriter t = TrackUsage (ứng dụng, [PrintWriter (), OutputWriter (biến đổi = lambda s: "OUTPUT:" + str (s))]) @ t.include @ app.route ('/') def index ( ): g.track_var ["option"] = "Write_Something" return "Xin chào" # Chạy ứng dụng nếu __name__ == "__main__": app.run (debug = True)

Giải thích ~ Chúng tôi sẽ tạo một ứng dụng theo dõi bằng cách nhập Cách sử dụng theo dõi, Trình ghi đầu vào và trình ghi đầu ra từ gói đã cài đặt. Chúng tôi chuyển ứng dụng bình của mình vào gói Track và sử dụng trình ghi đầu ra, và chúng tôi sử dụng hàm lambda, một hàm dòng đơn, để ghi đầu ra ở định dạng chuỗi. Sau đó, chúng tôi tạo một định tuyến cơ bản theo dấu gạch chéo và bao gồm ứng dụng theo dõi của chúng tôi như một người trang trí. G là viết tắt của toàn cầu cho biết dữ liệu là toàn cầu trong ngữ cảnh. Do đó, chúng tôi đã tạo một API cơ bản mà trên trình duyệt sẽ trả về, xin chào nhưng trên phần phụ trợ, bạn sẽ nhận được tất cả thông tin của người đó. Trên dấu nhắc lệnh, bạn có thể quan sát kết quả sau.

Theo dõi trên bình

Bạn có thể sử dụng JSON Formatter để xem đầu ra theo cách được định dạng tốt.

Đầu ra | API với Python và Flask

Cách viết mã Unit Test cho REST API của bạn

Bây giờ bạn đã tạo một API REST tuyệt vời cho trường hợp của mình. Tuy nhiên, người quản lý của bạn sẽ yêu cầu bạn viết mã Unit-test cho REST API vì điều cần thiết là xác định các lỗi phổ biến từ API của bạn và giúp sản xuất an toàn. Vì vậy, tôi hy vọng rằng bạn có một API đơn giản được tạo với bạn. Nếu không, hãy chạy một tệp mới có tên và phát triển API đơn giản bên dưới.

from flask import Flask from flask_restful import Resource, Api import json app = Flask (__ name__) api = Api (app) class Helloworld (Resource): def __init __ (self): pass def get (self): return json.dumps ({" Thông báo ":" Tốt "}) api.add_resource (Helloworld, '/') if __name__ == '__main__': app.run (debug = True)

Bây giờ, hãy tạo một thử nghiệm tên tệp khác, nơi chúng tôi sẽ viết mã để kiểm tra đơn vị API của chúng tôi. Vì vậy, thông thường nhất, bạn luôn phải thực hiện ba bài kiểm tra đơn vị cơ bản dưới đây.

  • Kiểm tra xem mã phản hồi có phải là 200 không
  • Kiểm tra nội dung được viết từ API là ứng dụng được Định dạng JSON
  • Kiểm tra để đảm bảo rằng tất cả các khóa mà chúng tôi đang truy cập đều có trong quá trình xử lý dữ liệu API.
from run import app import class unittest FlaskTest (unittest.TestCase): #Check for response 200 def test_inde (self): tester = app.test_client (self) #tester object response = tester.get ("/") statuscode = response. status_code self.assertEqual (statuscode, 200) #check nếu nội dung trả về là ứng dụng JSON def test_index_content (self): tester = app.test_client (self) response = tester.get ("/") self.assertEqual (response.content_type, "application / json") # kiểm tra Dữ liệu trả về def test_index_data (self): tester = app.test_client (self) response = tester.get ("/") self.assertTrue (b'Message 'trong response.data) nếu __name__ == '__main__': unittest.main ()

Vì vậy, để nói rõ hơn về cơ bản nếu bạn đã thực hiện quét web, thì mã phản hồi 200 có nghĩa là yêu cầu của bạn đối với một URL cụ thể đã được thực hiện thành công, nó trả về một phản hồi. Thứ hai là loại dữ liệu mà quản trị viên được cung cấp sẽ được loại bỏ một cách thích hợp khi ai đó yêu cầu và thứ ba là tất cả dữ liệu hiện có sẽ được sử dụng mà không cần bất kỳ sửa đổi nào.

Ghi chú kết thúc

Vội vàng! Chúng tôi đã học cách tạo API Flask REST từ đầu và bảo trì nó một cách dễ dàng và an toàn. Các API REST thuộc một loại khác và được sử dụng cho các mục đích khác. Bạn cũng có thể sử dụng định tuyến với các API như tạo một hàm trong một tệp riêng biệt và sử dụng nó như một trình trang trí với một trường hợp sử dụng Ứng dụng chính. Vì vậy, đây là tất cả cho bài viết này. Tôi hy vọng nó có thể dễ dàng nắm bắt được từng tiêu đề và nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới hoặc kết nối với tôi.

Nguồn hình ảnh - Trung bình

Kết nối với tôi trên Linkedin

Kiểm tra các bài viết khác của tôi nhấn vào đây. và hơn thế nữa công nghệ điên rồ

Cảm ơn vì đã dành thời gian của bạn!

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả.

Nguồn: https://www.analyticsvidhya.com/blog/2022/01/rest-api-with-python-and-flask/

Được Viết Bởi

Luồng liên quan

Ô tô

Hyundai sẽ chi 5.54 tỷ USD để thành lập một khu phức hợp sản xuất xe điện gần Savannah, Georgia, nhà sản xuất ô tô xác nhận vào chiều thứ Sáu. Hyundai xác nhận kế hoạch ...

Ô tô

Hyundai sẽ chi 5.54 tỷ USD để thành lập một khu phức hợp sản xuất xe điện gần Savannah, Georgia, nhà sản xuất ô tô xác nhận vào chiều thứ Sáu. Hyundai xác nhận kế hoạch ...

Bất động sản

Tuần này, Byron Lazine và Nicole White chào đón Tom Ferry để thảo luận về cuộc nói chuyện về bong bóng nhà ở, khả năng chi trả nhà và tiếp thị. Byron Lazine và Nicole ...

Bất động sản

Tuần này, Byron Lazine và Nicole White chào đón Tom Ferry để thảo luận về cuộc nói chuyện về bong bóng nhà ở, khả năng chi trả nhà và tiếp thị. Byron Lazine và Nicole ...