Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

플라스크-RESTX와 Apidog를 사용하여 RESTful API 구축 및 문서화하는 방법

Young-jae

Young-jae

Updated on January 15, 2025

Xây dựng API RESTful là một kỹ năng cơ bản trong phát triển web hiện đại, cho phép giao tiếp liền mạch giữa máy khách và máy chủ. Flask-RESTX, một phần mở rộng của framework Flask phổ biến, đơn giản hóa quy trình này bằng cách cung cấp các công cụ để tạo ra những API mạnh mẽ một cách hiệu quả. Trong hướng dẫn này, chúng ta sẽ khám phá cách xây dựng một API RESTful sử dụng Flask-RESTX và minh họa cách kiểm tra nó với Apidog, một nền tảng tích hợp cho thiết kế API, gỡ lỗi, tài liệu, giả lập, và kiểm tra.

💡
Hãy cân nhắc cải thiện quy trình phát triển API của bạn với Apidog. Đây là một công cụ toàn diện giúp tối ưu hóa thiết kế, gỡ lỗi, kiểm tra và tài liệu API. Tải Apidog miễn phí và làm theo hướng dẫn để xem cách nó tích hợp liền mạch vào quy trình.
button

1. Giới thiệu về API RESTful

REST (Chuyển trạng thái đại diện) là một phong cách kiến trúc sử dụng các phương thức HTTP tiêu chuẩn để tương tác với các tài nguyên. Các API tuân theo các nguyên tắc REST được gọi là API RESTful. Chúng cung cấp một giao diện có thể dự đoán và đồng nhất cho các tương tác giữa máy khách và máy chủ, làm cho dịch vụ web dễ tiếp cận và bảo trì hơn.

2. Thiết lập môi trường phát triển của bạn

Trước khi bắt đầu xây dựng API của mình, hãy thiết lập môi trường phát triển của bạn.

Điều kiện tiên quyết

Python 3.7 hoặc cao hơn: Đảm bảo rằng Python đã được cài đặt trên hệ thống của bạn. Kiểm tra bằng cách chạy:

python --version

Môi trường ảo: Đây là thói quen tốt để tạo ra một môi trường ảo cho dự án của bạn nhằm quản lý các phụ thuộc.

python -m venv venv
source venv/bin/activate  # Trên Windows: venv\Scripts\activate

Cài đặt Flask và Flask-RESTX

Khi môi trường ảo đã được kích hoạt, hãy cài đặt Flask và Flask-RESTX bằng pip:

pip install flask flask-restx

Điều này cài đặt cả Flask và Flask-RESTX, cho phép chúng ta xây dựng và quản lý các điểm cuối API một cách hiệu quả.

3. Cài đặt và cấu hình Flask-RESTX

Flask-RESTX là một phần mở rộng giúp hỗ trợ xây dựng nhanh chóng các API REST với Flask. Nó khuyến khích các thực tiễn tốt nhất với ít cấu hình nhất.

Cài đặt

Nếu bạn chưa cài đặt Flask-RESTX, bạn có thể làm điều đó bằng cách sử dụng pip:

pip install flask-restx

Cấu hình

Tạo một tệp Python mới, ví dụ, app.py, và thiết lập cấu hình cơ bản:

from flask import Flask
from flask_restx import Api

app = Flask(__name__)
api = Api(app, version='1.0', title='API Mẫu',
          description='Một API mẫu sử dụng Flask-RESTX')

if __name__ == '__main__':
    app.run(debug=True)

Script này khởi tạo một ứng dụng Flask và bọc nó bằng một instance API Flask-RESTX, cung cấp nền tảng để xây dựng các điểm cuối.

4. Tạo điểm cuối API đầu tiên của bạn

Chúng ta hãy tạo một điểm cuối đơn giản để hiểu cách Flask-RESTX hoạt động.

Định nghĩa một không gian tên

Không gian tên trong Flask-RESTX giúp tổ chức API của bạn và ngăn ngừa xung đột tên điểm cuối.

from flask_restx import Namespace, Resource

ns = Namespace('hello', description='Các thao tác Hello World')

Tạo một tài nguyên

Các tài nguyên trong Flask-RESTX tương ứng với các điểm cuối và xác định cách các phương thức HTTP được xử lý.

@ns.route('/')
class HelloWorld(Resource):
    def get(self):
        return {'message': 'Hello, World!'}

Đăng ký không gian tên

Cuối cùng, hãy đăng ký không gian tên với API:

api.add_namespace(ns)

Bây giờ, khi bạn chạy ứng dụng của mình và điều hướng đến http://localhost:5000/hello/, bạn sẽ thấy:

{
  "message": "Hello, World!"
}

5. Cấu trúc ứng dụng Flask-RESTX của bạn

Khi ứng dụng của bạn phát triển, việc duy trì một cấu trúc sạch sẽ và có tổ chức là rất quan trọng.

Cấu trúc dự án được khuyến nghị

project/
├── app/
│   ├── __init__.py
│   ├── controllers/
│   │   ├── __init__.py
│   │   └── hello_controller.py
│   ├── models/
│   │   ├── __init__.py
│   │   └── hello_model.py
│   └── services/
│       ├── __init__.py
│       └── hello_service.py
├── run.py
└── requirements.txt

Khởi tạo ứng dụng

Trong app/__init__.py:

from flask import Flask
from flask_restx import Api

def create_app():
    app = Flask(__name__)
    api = Api(app, version='1.0', title='API Mẫu',
              description='Một API mẫu sử dụng Flask-RESTX')

    from .controllers.hello_controller import ns as hello_namespace
    api.add_namespace(hello_namespace)

    return app

Trong run.py:

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

Cách tiếp cận mô đun này tách biệt các mối quan tâm, làm cho ứng dụng dễ bảo trì và mở rộng hơn.

6. Triển khai các thao tác CRUD

Các thao tác CRUD—Tạo, Đọc, Cập nhật, Xóa—là rất quan trọng cho việc phát triển API. Hãy triển khai chúng cho một tài nguyên Item đơn giản.

Định nghĩa mô hình

Trong app/models/item_model.py:

from flask_restx import fields

def get_item_model(api):
    return api.model('Item', {
        'id': fields.Integer(readOnly=True, description='Bộ định danh duy nhất của một mặt hàng'),
        'name': fields.String(required=True, description='Tên mặt hàng'),
        'price': fields.Float(required=True, description='Giá mặt hàng')
    })

Triển khai tài nguyên

Trong app/controllers/item_controller.py:

from flask_restx import Namespace, Resource, reqparse
from app.models.item_model import get_item_model

ns = Namespace('items', description='Các thao tác Item')

item_model = get_item_model(ns)

items = []
item_id_counter = 1

parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True, help='Tên của món hàng')
parser.add_argument('price', type=float, required=True, help='Giá của món hàng')

@ns.route('/')
class ItemList(Resource):
    @ns.marshal_list_with(item_model)
    def get(self):
        return items

    @ns.expect(item_model)
    @ns.marshal_with(item_model, code=201)
    def post(self):
        global item_id_counter
        args = parser.parse_args()
        item = {
            'id': item_id_counter,
            'name': args['name'],
            'price': args['price']
        }
        items.append(item)
        item_id_counter += 1
        return item, 201

@ns.route('/<int:id>')
@ns.response(404, 'Món hàng không tìm thấy')
@ns.param('id', 'Bộ định danh món hàng')
class Item(Resource):
    @ns.marshal_with(item_model)
    def get(self, id):
        item = next((item for item in items if item['id'] == id), None)
        if item is not None:
            return item
        ns.abort(404, message="Món hàng không tìm thấy")

    @ns.expect(item_model)
    @ns.marshal_with(item_model)
    def put(self, id):
        item = next((item for item in items if item['id'] == id), None)
        if item is not None:
            args = parser.parse_args()
            item.update({
                'name': args['name'],
                'price': args['price']
            })
            return item
        ns.abort(404, message="Món hàng không tìm thấy")

    @ns.response(204, 'Món hàng đã bị xóa')
    def delete(self, id):
        global items
        item = next((item for item in items if item['id'] == id), None)
        if item is not None:
            items = [item for item in items if item['id'] != id]
            return '', 204
        ns.abort(404, message="Món hàng không tìm thấy")

Trong việc triển khai này:

  • GET /items/: Lấy danh sách các mặt hàng.
  • POST /items/: Thêm một món hàng mới.
  • GET /items/{id}: Lấy một món hàng cụ thể bằng ID.
  • PUT /items/{id}: Cập nhật một món hàng hiện có bằng ID.
  • DELETE /items/{id}: Xóa một món hàng bằng ID.

Cài đặt này cung cấp một giao diện CRUD hoàn chỉnh để quản lý các mặt hàng trong API của bạn.

7. Xác thực và tuần tự hóa dữ liệu với Flask-RESTX

Xác thực dữ liệu và tuần tự hóa là rất quan trọng để đảm bảo tính toàn vẹn và nhất quán của dữ liệu mà API của bạn xử lý. Flask-RESTX cung cấp các trang trí và trường để thuận tiện hóa điều này.

Sử dụng mô hình để xác thực

Định nghĩa một mô hình để chỉ định định dạng đầu vào và đầu ra mong đợi.

from flask_restx import fields

item_model = api.model('Item', {
    'id': fields.Integer(readOnly=True, description='Bộ định danh duy nhất của một mặt hàng'),
    'name': fields.String(required=True, description='Tên mặt hàng'),
    'price': fields.Float(required=True, description='Giá mặt hàng')
})

Bằng cách trang trí các phương thức tài nguyên của bạn với @ns.expect(item_model), Flask-RESTX sẽ tự động xác thực dữ liệu JSON đầu vào theo mô hình này.

Tuần tự hóa các phản hồi

Sử dụng @ns.marshal_with để định dạng đầu ra theo mô hình.

@ns.marshal_with(item_model)
def get(self, id):
    # Lấy và trả về món hàng

Điều này đảm bảo rằng dữ liệu phản hồi tuân thủ cấu trúc đã chỉ định, thúc đẩy tính nhất quán cho toàn bộ API của bạn.

8. Kiểm tra API RESTful với Apidog

Kiểm tra là một phần quan trọng trong phát triển API, đảm bảo rằng các điểm cuối của bạn hoạt động như mong đợi. Apidog là một công cụ toàn diện giúp tối ưu hóa việc kiểm tra API, thiết kế và tài liệu.

Thiết lập Apidog

Tải và Cài đặt: Tải Apidog miễn phí và làm theo hướng dẫn cài đặt cho hệ điều hành của bạn.

button

Tạo một Dự án Mới: Khởi động Apidog và tạo một dự án mới cho API của bạn.

Nhập Đặc tả API của bạn

Nếu bạn đã tài liệu hóa API của mình bằng OpenAPI/Swagger, bạn có thể nhập đặc tả vào Apidog:

Nhập Đặc tả: Trong dự án Apidog của bạn, chọn tùy chọn nhập đặc tả API và tải lên tệp OpenAPI của bạn.

Khám Phá Các Điểm Cuối: Apidog sẽ phân tích tệp và hiển thị các điểm cuối, tham số và mô hình của API của bạn.

Bạn cũng có thể thiết kế API từ đầu trong Apidog.

Kiểm Tra Các Điểm Cuối

Chọn Một Điểm Cuối: Chọn điểm cuối mà bạn muốn kiểm tra từ danh sách.

Cấu Hình Yêu Cầu:

  • Phương thức: Đảm bảo rằng phương thức HTTP (GET, POST, PUT, DELETE) chính xác được chọn.
  • Tham số: Nhập bất kỳ tham số truy vấn hoặc biến đường dẫn cần thiết nào.
  • Đầu đề: Thiết lập các tiêu đề cần thiết, chẳng hạn như Content-Type: application/json.
  • Thân: Đối với các yêu cầu POST và PUT, cung cấp tải trọng JSON.

Gửi Yêu Cầu: Nhấp vào nút Gửi để thực thi yêu cầu.

Xem Xét Phản Hồi:

(Mẹo chuyên nghiệp: Apidog tự động xác thực phản hồi API.)

  • Mã trạng thái: Xác minh rằng mã trạng thái phản hồi khớp với mong đợi (ví dụ: 200 cho thành công, 201 cho tạo mới).
  • Thân phản hồi: Kiểm tra rằng dữ liệu trả về là chính xác và được định dạng đúng.
  • Đầu đề: Kiểm tra các tiêu đề phản hồi để biết thêm thông tin.

9. Tạo Tài liệu API với Flask-RESTX

Tài liệu đầy đủ là rất cần thiết cho bất kỳ API nào, giúp dễ dàng sử dụng và tích hợp cho các nhà phát triển. Flask-RESTX cung cấp hỗ trợ tích hợp để tạo tài liệu API tương tác.

Tạo tài liệu API đầy đủ và thân thiện với người dùng là rất quan trọng cho các nhà phát triển và người dùng tương tác với API của bạn. Flask-RESTX đơn giản hóa quy trình này bằng cách tự động tạo tài liệu Swagger UI, cung cấp một giao diện tương tác để khám phá và kiểm tra các điểm cuối API của bạn.

Tài liệu Swagger Tự động

Mặc định, Flask-RESTX tạo tài liệu Swagger có thể truy cập tại URL gốc của API của bạn. Tính năng này cung cấp cái nhìn tổng quan ngay lập tức về cấu trúc API của bạn và các điểm cuối có sẵn mà không cần cấu hình thêm.

Tùy chỉnh Tài liệu với Các Trang trí

Flask-RESTX cung cấp một số trang trí để nâng cao và tùy chỉnh tài liệu API của bạn:

@api.doc(): Thêm thông tin bổ sung cho các tài nguyên hoặc phương thức của bạn. Ví dụ, để tài liệu hóa các tham số:

@api.route('/my-resource/<id>')
@api.doc(params={'id': 'Một ID'})
class MyResource(Resource):
    def get(self, id):
        return {}

@api.response(): Tài liệu hóa các phản hồi mong đợi, bao gồm các mã trạng thái và mô tả:

@api.route('/my-resource/<id>')
class MyResource(Resource):
    @api.response(403, 'Không được phép')
    def post(self, id):
        api.abort(403)

@api.marshal_with(): Xác định mô hình đầu ra cho một phản hồi, đảm bảo định dạng dữ liệu nhất quán:

@api.route('/item/<int:id>')
class ItemResource(Resource):
    @api.marshal_with(item_model)
    def get(self, id):
        # Lấy và trả về món hàng

@api.expect(): Định nghĩa mô hình đầu vào mong đợi cho các yêu cầu, giúp thuận tiện cho việc xác thực và tài liệu:

@api.route('/item')
class ItemResource(Resource):
    @api.expect(item_model)
    def post(self):
        # Xử lý yêu cầu POST

Tổ chức bằng Các Không Gian Tên

Các không gian tên trong Flask-RESTX giúp nhóm các tài nguyên liên quan, nâng cao sự tổ chức cho API của bạn và tài liệu của nó.

from flask_restx import Namespace, Resource

ns = Namespace('items', description='Các thao tác Item')

@ns.route('/<int:id>')
class ItemResource(Resource):
    def get(self, id):
        # Lấy và trả về món hàng

Bằng cách đăng ký không gian tên với API, tất cả các tuyến đường và tài liệu liên quan được nhóm lại một cách thích hợp:

api.add_namespace(ns)

Truy cập vào Swagger UI

Khi ứng dụng Flask-RESTX của bạn đang chạy, bạn có thể truy cập vào Swagger UI tự động được tạo ra bằng cách điều hướng đến URL gốc của API của bạn (ví dụ: http://localhost:5000/). Giao diện này cung cấp một cuộc khám phá tương tác về API của bạn, hiển thị các điểm cuối có sẵn, đầu vào mong đợi, và các phản hồi tiềm năng.

Bằng cách tận dụng các tính năng này, bạn đảm bảo rằng API của bạn được tài liệu hóa tốt, thân thiện với người dùng và dễ hiểu cho cả các nhà phát triển và người tiêu dùng.

10. Cải thiện Tài liệu API với Apidog

Trong khi Flask-RESTX cung cấp tài liệu cơ bản, Apidog cung cấp các tính năng nâng cao cho tài liệu API, bao gồm tùy chỉnh, tạo mã tự động, và kiểm tra thời gian thực.

Sử dụng trình chỉnh sửa trực quan của Apidog để xác định các điểm cuối API, tham số yêu cầu, và sơ đồ phản hồi của bạn. Chỉ bằng một cú nhấp chuột, tạo tài liệu API đầy đủ và tương tác.

Chia sẻ tài liệu của bạn với các thành viên trong nhóm hoặc đối tác bên ngoài, cho phép họ kiểm tra các điểm cuối API trực tiếp trong tài liệu.

Bằng cách tích hợp Flask-RESTX với Apidog, bạn có thể tạo ra các API mạnh mẽ với tài liệu chuyên nghiệp, nâng cao cả hiệu quả phát triển và trải nghiệm người dùng.

Kết luận

Trong hướng dẫn toàn diện này, chúng ta đã khám phá quy trình xây dựng API RESTful bằng cách sử dụng Flask-RESTX, một phần mở rộng mạnh mẽ cho Flask giúp đơn giản hóa việc phát triển API. Chúng ta đã đề cập đến các chủ đề thiết yếu như thiết lập môi trường phát triển của bạn, tạo và quản lý các điểm cuối API, xác thực và tuần tự hóa dữ liệu, và tạo tài liệu API tương tác.

Thêm vào đó, chúng tôi đã giới thiệu Apidog, một công cụ đa năng cải thiện quy trình phát triển API của bạn bằng cách cung cấp các tính năng như kiểm tra tự động, kiểm tra hiệu suất và tài liệu hợp tác. Bằng cách tích hợp Apidog vào quy trình phát triển của bạn, bạn có thể đảm bảo rằng các API của bạn mạnh mẽ, hiệu quả và được tài liệu hóa tốt.

button