Hướng dẫn how do i create a rest api with python and flask? - làm cách nào để tạo một api còn lại với python và bình?
TL; DR: Trong suốt bài viết này, chúng tôi sẽ sử dụng Flask và Python để phát triển API RESTful. Chúng tôi sẽ tạo một điểm cuối trả về dữ liệu tĩnh (từ điển). Sau đó, chúng tôi sẽ tạo một lớp với hai chuyên ngành và một vài điểm cuối để chèn và truy xuất các trường hợp của các lớp này. Cuối cùng, chúng tôi sẽ xem xét cách chạy API trên thùng chứa Docker. Mã cuối cùng được phát triển trong suốt bài viết này có sẵn trong kho Github này. Tôi hy vọng bạn thích nó! Throughout this article, we will use Flask and Python to develop a RESTful API. We will create an endpoint that returns static data (dictionaries). Afterward, we will create a class with two specializations and a few endpoints to insert and retrieve instances of these classes. Finally, we will look at how to run the API on a Docker container. The final code developed throughout this article is available in this GitHub repository. I hope you enjoy it! Show
Bản tóm tắtBài viết này được chia thành các phần sau:
Tại sao Python?Ngày nay, việc chọn Python để phát triển các ứng dụng đang trở thành một lựa chọn rất phổ biến. Như Stackoverflow gần đây đã phân tích, Python là một trong những ngôn ngữ lập trình phát triển nhanh nhất, đã vượt qua ngay cả Java về số lượng câu hỏi được hỏi trên nền tảng. Trên GitHub, ngôn ngữ cũng có dấu hiệu áp dụng hàng loạt, chiếm vị trí thứ hai trong số các ngôn ngữ lập trình hàng đầu vào năm 2021. Cộng đồng khổng lồ hình thành xung quanh Python đang cải thiện mọi khía cạnh của ngôn ngữ. Ngày càng có nhiều thư viện nguồn mở đang được phát hành để giải quyết nhiều chủ đề khác nhau, như trí tuệ nhân tạo, học máy và phát triển web. Bên cạnh sự hỗ trợ to lớn được cung cấp bởi cộng đồng tổng thể, Quỹ phần mềm Python cũng cung cấp tài liệu tuyệt vời, nơi những người chấp nhận mới có thể học được bản chất của nó nhanh chóng. Tại sao bình?Khi nói đến phát triển web trên Python, có ba khung chiếm ưu thế: Django, Flask và một người chơi Fastapi tương đối mới. Django già hơn, trưởng thành hơn và phổ biến hơn một chút. Trên GitHub, khung này có khoảng 66k sao, những người đóng góp 2,2k, phát hành ~ 350 và hơn 25k. Fastapi đang phát triển ở tốc độ cao, với 48k sao trên GitHub, 370 người đóng góp và hơn 3,9k dĩa. Khung thanh lịch này được xây dựng cho API hiệu suất cao và nhanh đến mã không phải là một người bỏ lỡ. Bình, mặc dù ít phổ biến hơn, không xa phía sau. Trên GitHub, Flask có gần 60k sao, ~ 650 người đóng góp, ~ 23 bản phát hành và phân tích gần 15k. Mặc dù Django già hơn và có một cộng đồng rộng lớn hơn một chút, Flask có thế mạnh. Từ mặt đất, bình được xây dựng với khả năng mở rộng và đơn giản. Các ứng dụng bình được biết đến là nhẹ, chủ yếu so với các đối tác Django của họ. Các nhà phát triển Flask gọi nó là một khung hình vi mô, trong đó micro (như được giải thích ở đây) có nghĩa là mục tiêu là giữ cho cốt lõi đơn giản nhưng có thể mở rộng. Flask sẽ không đưa ra nhiều quyết định cho chúng tôi, chẳng hạn như sử dụng cơ sở dữ liệu nào hoặc chọn công cụ mẫu nào. Cuối cùng, Flask có tài liệu sâu rộng nhằm giải quyết mọi thứ mà các nhà phát triển cần bắt đầu. Fastapi tuân theo cách tiếp cận "micro" tương tự với bình, mặc dù nó cung cấp nhiều công cụ hơn như UI Swagger tự động và là một lựa chọn tuyệt vời cho API. Tuy nhiên, vì đây là một khung mới hơn, nhiều tài nguyên và thư viện khác tương thích với các khung như Django và Flask nhưng không phải với Fastapi. Trở nên nhẹ, dễ nhận nuôi, được ghi chép lại và phổ biến, bình thường là một lựa chọn tốt để phát triển các API RESTful. Bootstrapping một ứng dụng bìnhĐầu tiên và quan trọng nhất, chúng tôi sẽ cần cài đặt một số phụ thuộc vào máy phát triển của chúng tôi. Chúng tôi sẽ cần cài đặt Python 3, PIP (Chỉ số gói Python) và bình. Cài đặt Python 3Nếu chúng tôi đang sử dụng một số phiên bản gần đây của phân phối Linux phổ biến (như Ubuntu) hoặc MacOS, chúng tôi có thể đã cài đặt Python 3 trên máy tính của chúng tôi. Nếu chúng tôi đang chạy Windows, có lẽ chúng tôi sẽ cần cài đặt Python 3, vì hệ điều hành này không vận chuyển với bất kỳ phiên bản nào. Sau khi cài đặt Python 3 trên máy của chúng tôi, chúng tôi có thể kiểm tra xem chúng tôi có mọi thứ được thiết lập như mong đợi bằng cách chạy lệnh sau không:
Lưu ý rằng lệnh trên có thể tạo ra một đầu ra khác khi chúng ta có phiên bản Python khác. Điều quan trọng là bạn đang chạy ít nhất 6 hoặc mới hơn. Nếu chúng ta nhận được "Python 2" thay vào đó, chúng ta có thể thử phát hành 7. Nếu lệnh này tạo ra đầu ra chính xác, chúng ta phải thay thế tất cả các lệnh trong suốt bài viết để sử dụng 8 thay vì chỉ 9.Cài đặt PIPPIP là công cụ được đề xuất để cài đặt các gói Python. Mặc dù trang cài đặt chính thức nói rằng 0 được cài đặt nếu chúng tôi sử dụng Python 2> = 1 hoặc Python 3> = 2, việc cài đặt Python thông qua 3 trên Ubuntu không cài đặt 0. Do đó, chúng ta hãy kiểm tra xem chúng ta có cần cài đặt riêng 0 hay đã có nó không.
Nếu lệnh trên tạo ra một đầu ra tương tự như 6, thì chúng ta sẽ tốt. Nếu chúng ta nhận được 7, chúng ta có thể thử thay thế 0 bằng 9. Nếu chúng tôi không thể tìm thấy PIP cho Python 3 trên máy của chúng tôi, chúng tôi có thể làm theo các hướng dẫn ở đây để cài đặt PIP.Cài đặt bìnhChúng tôi đã biết bình là gì và khả năng của nó. Do đó, hãy tập trung vào việc cài đặt nó trên máy của chúng tôi và kiểm tra xem liệu chúng tôi có thể chạy ứng dụng bình cơ bản hay không. Bước đầu tiên là sử dụng 0 để cài đặt bình:
Sau khi cài đặt gói, chúng tôi sẽ tạo một tệp có tên 1 và thêm năm dòng mã vào nó. Vì chúng tôi sẽ sử dụng tệp này để kiểm tra xem bình có được cài đặt chính xác hay không, chúng tôi không cần phải tổ nó trong một thư mục mới.
5 dòng mã này là tất cả mọi thứ chúng ta cần để xử lý các yêu cầu HTTP và trả về "Xin chào, Thế giới!" thông điệp. Để chạy nó, chúng tôi thực thi lệnh sau:
Sau khi thực hiện các lệnh này, chúng tôi có thể tiếp cận ứng dụng của mình bằng cách mở trình duyệt và điều hướng đến 5 hoặc bằng cách phát hành 6.Môi trường ảo (VirtualEnv)Mặc dù PYPA, nhóm Cơ quan đóng gói Python Nhóm giới thiệu 0 là công cụ để cài đặt các gói Python, chúng tôi sẽ cần sử dụng một gói khác để quản lý các phụ thuộc của dự án. Đúng là 0 hỗ trợ quản lý gói thông qua tệp 9, nhưng công cụ này thiếu một số tính năng cần thiết cho các dự án nghiêm túc chạy trên các máy sản xuất và phát triển khác nhau. Trong số các vấn đề của nó, những vấn đề gây ra nhiều vấn đề nhất là:
Để giải quyết những vấn đề này, chúng tôi sẽ sử dụng pipenv. PIPENV là người quản lý phụ thuộc phân lập các dự án trong môi trường tư nhân, cho phép các gói được cài đặt cho mỗi dự án. Nếu bạn quen thuộc với NPM hoặc Ruby's Bundler, thì nó tương tự như vậy với các công cụ đó.
Bây giờ, để bắt đầu tạo một ứng dụng bình nghiêm túc, hãy tạo một thư mục mới sẽ giữ mã nguồn của chúng tôi. Trong bài viết này, chúng tôi sẽ tạo Cashman, một API nhỏ RESTful cho phép người dùng quản lý thu nhập và chi phí. Do đó, chúng tôi sẽ tạo một thư mục gọi là 2. Sau đó, chúng tôi sẽ sử dụng 3 để bắt đầu dự án và quản lý các phụ thuộc của chúng tôi.
Lệnh thứ hai tạo ra môi trường ảo của chúng tôi, nơi tất cả các phụ thuộc của chúng tôi được cài đặt và thứ ba sẽ thêm bình làm phụ thuộc đầu tiên của chúng tôi. Nếu chúng tôi kiểm tra thư mục của dự án, chúng tôi sẽ thấy hai tệp mới:
Mô -đun PythonGiống như các ngôn ngữ lập trình chính khác, Python cũng có khái niệm về các mô -đun để cho phép các nhà phát triển tổ chức mã nguồn theo các đối tượng/chức năng. Tương tự như các gói Java và không gian tên C#, các mô -đun trong Python là các tệp được tổ chức trong các thư mục mà các tập lệnh Python khác có thể nhập. Để tạo một mô -đun trên ứng dụng Python, chúng ta cần tạo một thư mục và thêm một tệp trống có tên 6.Hãy tạo mô -đun đầu tiên của chúng tôi trên ứng dụng của chúng tôi, mô -đun chính, với tất cả các điểm cuối RESTful của chúng tôi. Bên trong thư mục của ứng dụng, hãy tạo một cái khác có cùng tên, 7. Thư mục root 2 được tạo trước đó sẽ giữ siêu dữ liệu về dự án của chúng tôi, giống như những gì phụ thuộc có, trong khi mô -đun mới này sẽ là mô -đun của chúng tôi với các tập lệnh Python của chúng tôi.
Bên trong mô -đun chính, hãy tạo một tập lệnh gọi là 9. Trong tập lệnh này, chúng tôi sẽ xác định điểm cuối đầu tiên của ứng dụng của chúng tôi.________số 8Như trong ví dụ trước, ứng dụng của chúng tôi trả về một "Xin chào, Thế giới!" thông điệp. Chúng tôi sẽ bắt đầu cải thiện nó trong một giây, nhưng trước tiên, hãy tạo một tệp thực thi có tên 0 trong thư mục gốc của ứng dụng của chúng tôi.
Mục tiêu của tệp này là tạo điều kiện cho việc khởi động ứng dụng của chúng tôi. Mã nguồn của nó sẽ như sau: 0Lệnh đầu tiên xác định tập lệnh chính sẽ được thực thi bằng bình. Lệnh thứ hai chạy ứng dụng bình của chúng tôi trong bối cảnh môi trường ảo nghe tất cả các giao diện trên máy tính ( 1).
Để kiểm tra xem tập lệnh này có hoạt động chính xác không, chúng tôi chạy 2 để có kết quả tương tự như khi thực hiện "Xin chào, Thế giới!" đăng kí. 1Tạo điểm cuối RESTful với bìnhBây giờ ứng dụng của chúng tôi được cấu trúc, chúng tôi có thể bắt đầu mã hóa một số điểm cuối có liên quan. Như đã đề cập trước đây, mục tiêu của ứng dụng của chúng tôi là giúp người dùng quản lý thu nhập và chi phí. Chúng tôi sẽ bắt đầu bằng cách xác định hai điểm cuối để xử lý thu nhập. Hãy thay thế nội dung của tệp 3 bằng cách sau: 2Kể từ khi cải thiện ứng dụng của chúng tôi, chúng tôi đã loại bỏ điểm cuối đã trả về "Xin chào, Thế giới!" cho người dùng. Ở vị trí của nó, chúng tôi đã xác định một điểm cuối để xử lý các yêu cầu HTTP 4 để trả về thu nhập và một điểm cuối khác để xử lý các yêu cầu HTTP 5 để thêm các yêu cầu mới. Các điểm cuối này được chú thích bằng 6 để xác định các tuyến đường nghe các yêu cầu trên điểm cuối 7. Flask cung cấp tài liệu tuyệt vời về chính xác những gì điều này làm.Để tạo điều kiện cho quá trình này, chúng tôi hiện đang thao túng thu nhập làm từ điển. Tuy nhiên, chúng tôi sẽ sớm tạo các lớp để đại diện cho thu nhập và chi phí. Để tương tác với cả hai điểm cuối mà chúng tôi đã tạo, chúng tôi có thể bắt đầu ứng dụng của mình và đưa ra một số yêu cầu HTTP: 3Các mô hình ánh xạ với các lớp PythonSử dụng từ điển trong một trường hợp sử dụng đơn giản như ở trên là đủ. Tuy nhiên, đối với các ứng dụng phức tạp hơn liên quan đến các thực thể khác nhau và có nhiều quy tắc và xác nhận kinh doanh, chúng ta có thể cần phải gói gọn dữ liệu của mình thành các lớp Python. Chúng tôi sẽ tái cấu trúc ứng dụng của mình để tìm hiểu quá trình ánh xạ các thực thể (như thu nhập) dưới dạng các lớp. Điều đầu tiên chúng tôi sẽ làm là tạo một mô hình con để giữ tất cả các thực thể của chúng tôi. Chúng ta hãy tạo một thư mục 8 bên trong mô -đun 7 và thêm một tệp trống có tên 6 trên đó. 4Lập bản đồ một siêu lớp PythonChúng tôi sẽ tạo ba lớp trong mô -đun/thư mục mới này: 1, 2 và 3. Lớp đầu tiên sẽ là cơ sở cho hai người khác và chúng tôi sẽ gọi nó là 1. Chúng ta hãy tạo một tệp được gọi là 5 trong thư mục 8 với mã sau: 5Bên cạnh lớp 1, chúng tôi cũng xác định 8. Chúng tôi sẽ sử dụng cái sau để giải phóng và tuần tự hóa các trường hợp của 1 từ và đến các đối tượng JSON. Lớp này kế thừa từ một siêu lớp khác được gọi là 0 thuộc về một gói chưa được cài đặt. 6Marshmallow là một gói Python phổ biến để chuyển đổi các kiểu dữ liệu phức tạp, chẳng hạn như các đối tượng, đến và từ các kiểu dữ liệu Python tích hợp. Chúng ta có thể sử dụng gói này để xác thực, tuần tự hóa và giảm dần dữ liệu. Chúng tôi sẽ không đi sâu vào xác nhận trong bài viết này, vì nó sẽ là chủ đề của một chủ đề khác. Mặc dù, như đã đề cập, chúng tôi sẽ sử dụng 1 để tuần tự hóa và giải phóng các thực thể thông qua các điểm cuối của chúng tôi.Ánh xạ thu nhập và chi phí dưới dạng các lớp PythonĐể giữ cho mọi thứ được tổ chức và có ý nghĩa hơn, chúng tôi sẽ không phơi bày lớp 1 trên các điểm cuối của chúng tôi. Chúng tôi sẽ tạo hai chuyên ngành để xử lý các yêu cầu: 2 và 3. Hãy tạo một tệp được gọi là 5 bên trong mô -đun 8 với mã sau: 7Giá trị duy nhất mà lớp này bổ sung cho ứng dụng của chúng tôi là nó mã hóa loại giao dịch. Loại này là một điều tra viên Python, mà chúng tôi vẫn phải tạo, điều đó sẽ giúp chúng tôi lọc các giao dịch trong tương lai. Chúng ta hãy tạo một tệp khác, được gọi là 7, bên trong 8 để đại diện cho người liệt kê này: 8Mã của bảng điều khiển khá đơn giản. Nó chỉ xác định một lớp gọi là 9 kế thừa từ 0 và xác định hai loại: 1 và 2.Cuối cùng, hãy tạo lớp đại diện cho chi phí. Để làm điều đó, chúng ta hãy thêm một tệp mới có tên 3 bên trong 8 với mã sau: 9Tương tự như 2, lớp này mã hóa loại giao dịch, nhưng bây giờ nó chuyển 2 cho siêu lớp. Sự khác biệt là nó biến đổi 7 đã cho là âm. Do đó, bất kể người dùng sẽ gửi một giá trị dương hoặc âm, chúng tôi sẽ luôn lưu trữ nó là tiêu cực để tạo điều kiện cho các tính toán.Các đối tượng tuần tự hóa và giải phóng với MarshmallowVới siêu lớp 1 và các chuyên ngành được thực hiện đầy đủ, giờ đây chúng tôi có thể tăng cường các điểm cuối của mình để đối phó với các lớp này. Hãy thay thế nội dung 3 thành: 0Phiên bản mới mà chúng tôi vừa triển khai bắt đầu bằng cách xác định lại biến 00 thành danh sách 01 và 02, hiện được gọi là 03. Bên cạnh đó, chúng tôi cũng đã thay đổi việc thực hiện cả hai phương pháp liên quan đến thu nhập. Đối với điểm cuối được sử dụng để truy xuất thu nhập, chúng tôi đã xác định một thể hiện 04 để tạo ra biểu diễn JSON của thu nhập. Chúng tôi cũng đã sử dụng 05 để trích xuất thu nhập từ danh sách ____10103. Cuối cùng, chúng tôi gửi mảng thu nhập JSON trở lại cho người dùng.Điểm cuối chịu trách nhiệm chấp nhận thu nhập mới cũng được tái cấu trúc. Thay đổi trên điểm cuối này là việc bổ sung 04 để tải một thể hiện 2 dựa trên dữ liệu JSON được gửi bởi người dùng. Vì danh sách 03 liên quan đến các trường hợp của 1 và các lớp con của nó, chúng tôi chỉ cần thêm 2 mới trong danh sách đó.Hai điểm cuối khác chịu trách nhiệm xử lý các chi phí, 12 và 13, gần như là bản sao của các đối tác 14 của họ. Sự khác biệt là:
Điều này kết thúc việc thực hiện API của chúng tôi. Nếu chúng tôi chạy ứng dụng Flask của mình ngay bây giờ, chúng tôi sẽ có thể tương tác với các điểm cuối, như được hiển thị ở đây: 1Ứng dụng Dockerizing BìnhKhi chúng tôi dự định cuối cùng sẽ phát hành API của chúng tôi trên đám mây, chúng tôi sẽ tạo ra một 19 để mô tả những gì cần thiết để chạy ứng dụng trên container Docker. Chúng tôi cần cài đặt Docker trên máy phát triển của chúng tôi để kiểm tra và chạy các trường hợp dockerized của dự án của chúng tôi. Xác định công thức Docker ( 19) sẽ giúp chúng tôi chạy API trong các môi trường khác nhau. Đó là, trong tương lai, chúng tôi cũng sẽ cài đặt Docker và chạy chương trình của chúng tôi trên các môi trường như sản xuất và dàn dựng.Hãy tạo 19 trong thư mục gốc của dự án của chúng tôi với mã sau: 2Mục đầu tiên trong công thức xác định rằng chúng tôi sẽ tạo container Docker của chúng tôi dựa trên hình ảnh Docker Python 3 mặc định. Sau đó, chúng tôi cập nhật APK và cài đặt 3. Có 3, chúng tôi xác định thư mục làm việc mà chúng tôi sẽ sử dụng trong hình ảnh và sao chép mã cần thiết để bootstrap và chạy ứng dụng. Trong bước thứ tư, chúng tôi sử dụng 3 để cài đặt tất cả các phụ thuộc Python của chúng tôi. Cuối cùng, chúng tôi xác định rằng hình ảnh của chúng tôi sẽ giao tiếp qua cổng 25 và hình ảnh này, khi được thực hiện, cần chạy tập lệnh 0 để bắt đầu bình.
Để tạo và chạy bộ chứa Docker dựa trên 19 mà chúng tôi đã tạo, chúng tôi có thể thực thi các lệnh sau: 3 19 rất đơn giản nhưng hiệu quả, và sử dụng nó tương tự dễ dàng. Với các lệnh này và 19 này, chúng ta có thể chạy nhiều trường hợp API của chúng ta như chúng ta cần mà không gặp rắc rối. Đó chỉ là vấn đề xác định một cổng khác trên máy chủ hoặc thậm chí một máy chủ khác.Đảm bảo API Python với AUTH0Việc đảm bảo API Python với AUTH0 rất dễ dàng và mang lại nhiều tính năng tuyệt vời cho bảng. Với Auth0, chúng ta chỉ phải viết một vài dòng mã để nhận:
Ví dụ, để bảo mật API Python được viết bằng bình, chúng ta chỉ có thể tạo một trình trang trí 35: 4Sau đó sử dụng nó trong các điểm cuối của chúng tôi: 5Để tìm hiểu thêm về việc đảm bảo API Python với AUTH0, hãy xem hướng dẫn này. Cùng với các hướng dẫn cho các công nghệ phụ trợ (như Python, Java và PHP), trang web AUTH0 DOCS cũng cung cấp các hướng dẫn cho các ứng dụng di động/gốc và các ứng dụng một trang. Bước tiếp theoTrong bài viết này, chúng tôi đã tìm hiểu về các thành phần cơ bản cần thiết để phát triển một ứng dụng bình có cấu trúc tốt. Chúng tôi đã xem xét cách sử dụng 3 để quản lý các phụ thuộc của API của chúng tôi. Sau đó, chúng tôi đã cài đặt và sử dụng bình và marshmallow để tạo các điểm cuối có khả năng nhận và gửi phản hồi JSON. Cuối cùng, chúng tôi cũng đã xem xét cách dockerize API, điều này sẽ tạo điều kiện cho việc phát hành ứng dụng lên đám mây.Mặc dù có cấu trúc tốt, API của chúng tôi chưa hữu ích. Trong số những điều chúng ta có thể cải thiện, chúng ta sẽ đề cập đến các chủ đề sau trong bài viết sau:
Giữ nguyên! Bình Python có phải là API REST không?Flask Restful là một phần mở rộng cho Flask thêm hỗ trợ cho việc xây dựng API REST trong Python sử dụng Flask làm mặt sau. Nó khuyến khích các thực tiễn tốt nhất và rất dễ dàng để thiết lập. Flask Restful rất dễ dàng để nhặt nếu bạn đã quen thuộc với bình. Trong flask_restful, khối xây dựng chính là một tài nguyên.. It encourages best practices and is very easy to set up. Flask restful is very easy to pick up if you're already familiar with flask. In flask_restful , the main building block is a resource.
Làm cách nào để tạo API REST trong Python?Xây dựng một máy chủ API REST Python để chế giễu nhanh chóng.. Mã đầu tiên vs thiết kế API đầu tiên .. Tạo điểm cuối đầu tiên của bạn. Flask vs Falcon cho API REST. Một bình đơn giản nhận được yêu cầu. .... Thêm các phương thức và điểm cuối khác. Thêm một yêu cầu bài viết. Falcon giúp bạn tập trung vào tài nguyên .. Xây dựng máy chủ giả mà không có mã .. Chúng ta có thể sử dụng Python cho API REST không?API REST cho phép người dùng truy cập dữ liệu dịch vụ web thông qua URL web công khai.Python Rest API là một API như vậy.Bạn có thể sử dụng URL này để có thông tin về một người dùng GitHub nhất định.Gửi yêu cầu HTTP đến URL cụ thể và xử lý câu trả lời là cách bạn nhận dữ liệu từ API REST Python.Python REST API is one such API. You can use this URL to get information on a certain GitHub user. Sending an HTTP request to a specific URL and processing the answer is how you get data from a Python REST API.
Sự khác biệt giữa bình và API REST là gì?Django Rest Framework là một bộ công cụ mạnh mẽ và linh hoạt giúp bạn dễ dàng xây dựng API Web.Mặt khác, Flask được trình bày chi tiết là "một khung hình vi mô cho Python dựa trên Werkzeug, Jinja 2 và ý định tốt".Flask nhằm mục đích bắt đầu rất nhanh và được phát triển với ý định tốt nhất trong tâm trí.Flask is detailed as "a microframework for Python based on Werkzeug, Jinja 2 and good intentions". Flask is intended for getting started very quickly and was developed with best intentions in mind. |