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!

"Flask cho phép các nhà phát triển Python tạo ra các API yên tĩnh nhẹ."

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?

Tweet cái này đi

Bản tóm tắt

Bài viết này được chia thành các phần sau:

  1. Tại sao Python?
  2. Tại sao bình?
  3. Bootstrapping một ứng dụng bình
  4. Tạo điểm cuối RESTful với bình
  5. Các mô hình ánh xạ với các lớp Python
  6. Các đối tượng tuần tự hóa và giải phóng với Marshmallow
  7. Ứng dụng Dockerizing Bình
  8. Đảm bảo API Python với AUTH0
  9. Bước tiếp theo

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.

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?

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 3

Nế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:

python --version
# Python 3.8.9

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

# we might need to replace pip with pip3
pip install Flask
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
# we might need to replace pip with pip3
pip install Flask
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
# we might need to replace pip with pip3
pip install Flask
8 thay vì chỉ
# we might need to replace pip with pip3
pip install Flask
9.

Cài đặt PIP

PIP 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

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0 được cài đặt nếu chúng tôi sử dụng Python 2> =
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
1 hoặc Python 3> =
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
2, việc cài đặt Python thông qua
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
3 trên Ubuntu không cài đặt
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0. Do đó, chúng ta hãy kiểm tra xem chúng ta có cần cài đặt riêng
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0 hay đã có nó không.

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)

Nếu lệnh trên tạo ra một đầu ra tương tự như

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
6, thì chúng ta sẽ tốt. Nếu chúng ta nhận được
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
7, chúng ta có thể thử thay thế
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0 bằng
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
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ình

Chú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

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0 để cài đặt bình:

# we might need to replace pip with pip3
pip install Flask

Sau khi cài đặt gói, chúng tôi sẽ tạo một tệp có tên

flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
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.

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

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:

flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit

Trên Ubuntu, chúng ta có thể cần chỉnh sửa biến

flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
2 để có thể chạy bình trực tiếp. Để làm điều đó, chúng ta hãy
flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
3 và sau đó
flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
4.

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

flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
5 hoặc bằng cách phát hành
flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
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

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
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à
# hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"
0 hỗ trợ quản lý gói thông qua tệp
flask --app hello run

 * Serving Flask app 'hello'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
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à:

  • # hello.py
    
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello_world():
        return "Hello, World!"
    0 Cài đặt các gói trên toàn cầu, khiến bạn khó quản lý nhiều phiên bản của cùng một gói trên cùng một máy.
  • flask --app hello run
    
     * Serving Flask app 'hello'
     * Debug mode: off
    WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on http://127.0.0.1:5000
    Press CTRL+C to quit
    9 Cần tất cả các phụ thuộc và phụ thuộc phụ được liệt kê rõ ràng, một quy trình thủ công là tẻ nhạt và dễ bị lỗi.

Để 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ụ đó.

pip install pipenv

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à

pip install pipenv
2. Sau đó, chúng tôi sẽ sử dụng
pip install pipenv
3 để bắt đầu dự án và quản lý các phụ thuộc của chúng tôi.

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask

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:

  1. pip install pipenv
    4 chứa chi tiết về dự án của chúng tôi, chẳng hạn như phiên bản Python và các gói cần thiết.
  2. pip install pipenv
    5 chứa chính xác phiên bản của mỗi gói mà dự án của chúng tôi phụ thuộc vào và các phụ thuộc chuyển tiếp của nó.

Mô -đun Python

Giố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

pip install pipenv
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,

pip install pipenv
7. Thư mục root
pip install pipenv
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.

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py

Bên trong mô -đun chính, hãy tạo một tập lệnh gọi là

pip install pipenv
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ố 8

Như 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

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
0 trong thư mục gốc của ứng dụng của chúng tôi.

# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh

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:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
0

Lệ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 (

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
1).

Lưu ý: Chúng tôi đang đặt bình để chạy ở chế độ gỡ lỗi để nâng cao trải nghiệm phát triển của chúng tôi và kích hoạt tính năng tải lại nóng, vì vậy chúng tôi không phải khởi động lại máy chủ mỗi khi chúng tôi thay đổi mã. Nếu bạn chạy bình trong sản xuất, chúng tôi khuyên bạn nên cập nhật các cài đặt này để sản xuất.

Để 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

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
2 để có kết quả tương tự như khi thực hiện "Xin chào, Thế giới!" đăng kí.

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
1

Tạo điểm cuối RESTful với bình

Bâ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

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
3 bằng cách sau:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
2

Kể 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

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
4 để trả về thu nhập và một điểm cuối khác để xử lý các yêu cầu HTTP
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
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
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
6 để xác định các tuyến đường nghe các yêu cầu trên điểm cuối
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
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:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
3

Các mô hình ánh xạ với các lớp Python

Sử 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

# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
8 bên trong mô -đun
pip install pipenv
7 và thêm một tệp trống có tên
pip install pipenv
6 trên đó.

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
4

Lập bản đồ một siêu lớp Python

Chúng tôi sẽ tạo ba lớp trong mô -đun/thư mục mới này:

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
1,
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
2 và
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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à
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
1. Chúng ta hãy tạo một tệp được gọi là
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
5 trong thư mục
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
8 với mã sau:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
5

Bên cạnh lớp

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
1, chúng tôi cũng xác định
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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à
from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"
0 thuộc về một gói chưa được cài đặt.

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
6

Marshmallow 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

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"
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

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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:
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
2 và
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
3. Hãy tạo một tệp được gọi là
from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"
5 bên trong mô -đun
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
8 với mã sau:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
7

Giá 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à

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"
7, bên trong
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
8 để đại diện cho người liệt kê này:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
8

Mã của bảng điều khiển khá đơn giản. Nó chỉ xác định một lớp gọi là

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"
9 kế thừa từ
# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
0 và xác định hai loại:
# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
1 và
# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
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

# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
3 bên trong
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
8 với mã sau:

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
9

Tương tự như

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
2, lớp này mã hóa loại giao dịch, nhưng bây giờ nó chuyển
# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
2 cho siêu lớp. Sự khác biệt là nó biến đổi
# move to the root directory
cd ..

# create the file
touch bootstrap.sh

# make it executable
chmod +x bootstrap.sh
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 Marshmallow

Với siêu lớp

# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
3 thành:

# we might need to replace pip with pip3
pip install Flask
0

Phiê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

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
00 thành danh sách
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
01 và
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
02, hiện được gọi là
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
04 để tạo ra biểu diễn JSON của thu nhập. Chúng tôi cũng đã sử dụng
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
04 để tải một thể hiện
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
2 dựa trên dữ liệu JSON được gửi bởi người dùng. Vì danh sách
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
03 liên quan đến các trường hợp của
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
1 và các lớp con của nó, chúng tôi chỉ cần thêm
# create source code's root
mkdir cashman && cd cashman

# create an empty __init__.py file
touch __init__.py
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í,

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
12 và
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
13, gần như là bản sao của các đối tác
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
14 của họ. Sự khác biệt là:

  • Thay vì xử lý các trường hợp
    # create source code's root
    mkdir cashman && cd cashman
    
    # create an empty __init__.py file
    touch __init__.py
    2, chúng tôi xử lý các trường hợp
    # create source code's root
    mkdir cashman && cd cashman
    
    # create an empty __init__.py file
    touch __init__.py
    3 để chấp nhận chi phí mới,
  • Và thay vì lọc bởi
    # we might need to change pip by pip3
    pip --version
    # pip 9.0.1 ... (python 3.X)
    17, chúng tôi lọc bằng
    # we might need to change pip by pip3
    pip --version
    # pip 9.0.1 ... (python 3.X)
    18 để gửi lại chi phí cho người dùng.

Đ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:

# we might need to replace pip with pip3
pip install Flask
1

Ứng dụng Dockerizing Bình

Khi 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

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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 (
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
19 trong thư mục gốc của dự án của chúng tôi với mã sau:

# we might need to replace pip with pip3
pip install Flask
2

Mụ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

pip install pipenv
3. Có
pip install pipenv
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
pip install pipenv
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
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
25 và hình ảnh này, khi được thực hiện, cần chạy tập lệnh
# create our project directory and move to it
mkdir cashman-flask-project && cd cashman-flask-project

# use pipenv to create a Python 3 (--three) virtualenv for our project
pipenv --three

# install flask a dependency on our project
pipenv install flask
0 để bắt đầu bình.

Lưu ý: Đối với

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
19 của chúng tôi, chúng tôi sử dụng Python phiên bản 3.8, tuy nhiên, tùy thuộc vào cấu hình hệ thống của bạn,
pip install pipenv
3 có thể đã đặt một phiên bản khác cho Python trong tệp
pip install pipenv
4. Vui lòng đảm bảo rằng phiên bản Python trong cả
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
19 và
pip install pipenv
4 được căn chỉnh hoặc container Docker sẽ không thể khởi động máy chủ.

Để tạo và chạy bộ chứa Docker dựa trên

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
19 mà chúng tôi đã tạo, chúng tôi có thể thực thi các lệnh sau:

# we might need to replace pip with pip3
pip install Flask
3

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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à
# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
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 AUTH0

Việ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:

  • Một giải pháp quản lý nhận dạng vững chắc, bao gồm đăng nhập một lần
  • Quản lý người dùng
  • Hỗ trợ cho các nhà cung cấp nhận dạng xã hội (như Facebook, GitHub, Twitter, v.v.)
  • Nhà cung cấp nhận dạng doanh nghiệp (Active Directory, LDAP, SAML, v.v.)
  • Cơ sở dữ liệu của chúng tôi về người dùng

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í

# we might need to change pip by pip3
pip --version
# pip 9.0.1 ... (python 3.X)
35:

# we might need to replace pip with pip3
pip install Flask
4

Sau đó sử dụng nó trong các điểm cuối của chúng tôi:

# we might need to replace pip with pip3
pip install Flask
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 theo

Trong 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

pip install pipenv
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:

  • Cơ sở dữ liệu tồn tại với sqlalchemy
  • Thêm ủy quyền vào ứng dụng API bình
  • Cách xử lý JWTS trong Python

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.