Logo Zephyrnet

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

Ngày:

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, 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 đầu cuối hoàn chỉnh với Flask. Bạn có thể truy cập bài viết trước từ Ở đây. Nhưng mọi người có nhiều nghi ngờ về REST API, 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ẽ học cách tạo API Flask một cách thực tế và vận hành các API REST của chúng ta quyền lực hơn. Trước khi bắt đầu, tôi giả sử rằng bạn đã quen với Python và Flask cơ bản.

Mục lục

  1. Giới thiệu tóm tắt về REST API
  2. Tạo API REST đầu tiên của bạn bằng Flask
  3. Yêu cầu HTTP khác nhau với API REST
  4. Sử dụng Trình trang trí trong API REST
  5. Cách bảo mật API Flask
  6. Cách bật tính năng theo dõi trên Flask API
  7. Viết bài kiểm tra đơn vị cho REST API
  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 ứ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 kiến ​​trúc microservice. API sẽ cho phép bạn nhận 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 qua 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á. Các ứng dụng đặt vé sử dụng một cổng API mong muốn để cập nhật dữ liệu ở giao diện quen thuộc.

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

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, API này cho biết rằng nếu bạn nhấn vào yêu cầu nhận trên đó, bạn sẽ nhận được phản hồi JSON vì thông thường API luôn đưa ra 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 mã bên dưới. Tạo một tệp python mới và nhập mã bên dưới.

cài đặt pip bình pip cài đặt bình yên tĩnh
from jar import Flask from jar_restful import Resource, Api app = Flask(__name__) api = Api(app) class Helloworld(Resource): def __init__(self): pass def get(self): return { "Xin chào": "Thế giới" } api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Bình-Restful là gì?

Flask Restful xác định lớp tài nguyên chứa các phương thức cho từng 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 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 thức này không có trình trang trí tuyến đường nên chúng dựa trên các tuyến tài nguyên. Dù chúng ta xác định lớp nào, chúng ta cũng xác định tuyến đường đến nó bằng phương thức thêm tài nguyên và tuyế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 mình. 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 cho biết nếu có ai truy cập vào lớp này thì anh ấy 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ý API. Bạn cũng có thể sử dụng mô-đun yêu cầu để thử API này bằng mã bên dưới. Trước tiên, hãy chạy tệp trên, tệp này sẽ cung cấp cho bạn URL localhost và trong một dấu nhắc lệnh khác, hãy chạy tệp mã bên dưới.

yêu cầu nhập url = "http://127.0.0.1:5000/" phản hồi = 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 đã quen với REST API. Trong 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, trong đó 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 rất 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 nhưng dữ liệu ở một nơi khác.

Ở đây, chúng tôi đang tạo một API trong đó chúng tôi sẽ tạo 3 phương thức HTTP có tên GET, POST và DELETE trong đó 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, nó sẽ lấy Tên làm đầu vào và khi nhấn phương thức GET, sẽ trả 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 vào tên đó sẽ cho chúng tôi NULL. Tạo một tập tin và viết mã dưới đây.

from jar import Flask from jar_restful import Resource, Api app = Flask(__name__) api = Api(app) data = [] class People(Resource): def get(self): for x in data: if x['Data'] == tên: return x return {'Data': None} def post(self, name): temp = {'Data': name} data.append(temp) return temp def delete(self): for ind, x in liệt kê(dữ liệu): if x['Data'] == tên: temp = data.pop(ind) return {'Note': 'Deleted'} api.add_resource(People, '/Name/') if __name__ == '__main__': app.run(debug=True)

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 ta sử dụng yêu cầu đăng bài bằng Tên, nó sẽ đặt cho chúng ta một cái tên. Khi nhận được yêu cầu, chúng tôi lấy lại Tên. Nó sẽ bị xóa khi xóa và khi bạn cố lấy lại nó, nó sẽ cung cấp cho bạn NULL. Quan sát kết quả dưới đây.

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 Trình trang trí trong API Flask REST

Chúng tôi sử dụng trình trang trí có API để giám sát địa chỉ IP, cookie, v.v. Vì vậy, trong tiêu đề này, chúng ta sẽ tìm hiểu cách tận dụng API bình với các trình trang trí. Trình trang trí là một hàm lấy 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 thêm một số chức năng cho hàm hiện có mà không thay đổi hay 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 cách tạo hai 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 ta nhập trình trang trí bao bọc được áp dụng cho hàm bao bọc từ chức năng module (mô-đun tiêu chuẩn cho các hàm python bậc cao hơn). Nó cập nhật hàm được bao 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 def (chức năng = Không):

@wraps(chức năng)

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

s = datetime.datetime.now()

_ = hàm(*args, **kwargs)

e = datetime.datetime.now()

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

trở lại _

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

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

@màn hình

def get (tự):

trở về {'xin chào': 'thế giới'}

api.add_resource(HelloWorld, '/')

nếu __name__ == '__main__':

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


Công cụ trang trí trong Flask Tools

Chúng tôi tạo trình trang trí thứ hai để theo dõi 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 hàm hello world, hãy thêm trình trang trí màn hình và chạy mã.

def màn hình(function=None): @wraps(function) def Wrapper(*args, **kwargs): _ = function(*args, **kwargs) print("Địa chỉ IP : {} ".format(request.remote_user )) print("Cookie : {} ".format(request.cookies)) print(request.user_agent) return _ return bao bọc

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

Khi thiết kế API, chúng ta cũng nên quan tâm đến vấ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 Flask. Bạn cần cài đặt mô-đun bình này bằng lệnh pip.

pip cài đặt bình-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 trường hợp 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 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 sẽ không thể truy cập dữ liệu nếu không đăng nhập.

từ bình nhập Flask từ bình_restful nhập Tài nguyên, Api từ bình_httpauth nhập HTTPBasicAuth ứng dụng = Flask(__name__) api = Api(app, prefix="/api/v1") auth = HTTPBasicAuth() USER_DATA = { "admin": "SuperSecretPwd" } #route để xác minh mật khẩu @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 Trả về sai USER_DATA.get(username) == lớp mật khẩu PrivateResource(Resource): @auth.login_required def get(self): return {"Josh thế nào": "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ờ hãy chuyển đến ủ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 rồi nhấn GET request để nhận được kết quả như 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 Flask

Chúng tôi đã tìm hiểu cách có thể bảo mật API của mình khỏi đăng nhập trái phép, nhưng 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ủ như thông tin chi tiết về 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.

cài đặt pip sử dụng theo dõi bình
từ bình nhập Flask, g app = Flask(__name__) app.config['TRACK_USAGE_USE_FREEGEOIP'] = Sai app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'bao gồm' từ bình_track_usage nhập TrackUsage từ bình_track_usage.storage.printer nhập PrintWriter từ bình_track_usage.storage .output import OutputWriter t = TrackUsage(app, [ PrintWriter(), OutputWriter(transform=lambda s: "OUTPUT: " + str(s)) ]) @t.include @app.route('/') def index( ): g.track_var["tuỳ chọn"] = "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 Sử dụng bản nhạc, 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 sang gói Theo dõi và sử dụng Trình ghi đầu ra, đồng thời 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 định tuyến cơ bản trên dấu gạch chéo và đưa ứng dụng bản nhạc của chúng tôi làm công cụ trang trí. G là viết tắt của toàn cầu cho biết dữ liệu mang tính toàn cầu trong ngữ cảnh. Do đó, chúng tôi đã tạo một API cơ bản để trả về trên trình duyệt, xin chào nhưng ở 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 đầu ra sau.

Theo dõi trên Flask

Bạn có thể sử dụng JSON Formatter để xem kết quả đầu ra theo cách được định dạng phù hợp.

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

Cách viết mã Kiểm tra đơn vị cho API REST 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ã Kiểm tra đơn vị cho API REST 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 bảo mật quá trình sản xuất. Vì vậy, tôi hy vọng rằng bạn đã tạo một API đơn giản cho riêng mình. Nếu không, hãy tạo một tệp mới có tên run và phát triển API đơn giản bên dưới.

from jar import Flask from jar_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({" Message": "Fine"}) api.add_resource(Helloworld, '/') if __name__ == '__main__': app.run(debug=True)

Bây giờ, hãy tạo một bài kiểm tra tên tệp khác để chúng tôi viết mã cho đơn vị kiểm tra 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 xem tất cả các khóa chúng tôi đang truy cập đều có trong quá trình xử lý dữ liệu API hay không.
from run import app import unittest class FlaskTest(unittest.TestCase): #Check for reply 200 def test_inde(self): test = app.test_client(self) #tester object phản hồi = test.get("/") statuscode = reply. status_code self.assertEqual(statuscode, 200) #kiểm tra xem nội dung trả về có phải là ứng dụng JSON def test_index_content(self): thử nghiệm = app.test_client(self) phản hồi = thử nghiệm.get("/") self.assertEqual(response.content_type, "application/json") #kiểm tra Dữ liệu được trả về def test_index_data(self): thử nghiệm = app.test_client(self) phản hồi = thử nghiệm.get("/") self.assertTrue(b'Message' trong phản hồi.data) if __name__ == '__main__': unittest.main()

Vì vậy, để giải thích 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 tới một URL cụ thể đã được thực hiện thành công và sẽ 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 cần đượ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ẽ không có bất kỳ sửa đổi nào.

Ghi chú kết thúc

Sự vội vàng! Chúng tôi đã học cách tạo Flask REST API từ đầu và bảo trì nó một cách dễ dàng và an toàn. API REST thuộc 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 bằng API như tạo một hàm trong một tệp riêng biệt và sử dụng nó làm công cụ trang trí cho 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 bạn có thể dễ dàng nắm bắt từng tiêu đề và nếu bạn có bất kỳ câu hỏi nào, vui lòng đă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 Ở đây và hơn thế nữa kỹ thuật viên đ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 riêng của Tác giả.

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

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?