Trước khi tìm hiểu về chủ đề của bài viết này, chúng ta hãy cùng xem lại thành phần cơ bản của một web hoặc mobile app và công nghệ hay ngôn ngữ lập trình đằng sau của chúng, nếu bạn là một expert thì hãy đến bước tiếp theo:

Thành phần (hay các lớp) của ứng dụng

Như vậy, theo mô hình trên thì ta thấy sẽ có 3 phần chính:
1. Máy khách (clients):
- Có thể là web brower như là Chrome, Safari, vv hoặc là ứng dụng trên điện thoại iOS/Android
- Giao tiếp với máy chủ qua phương thức HTTP/HTTPS; thường thì theo chuẩn API, Rest API hoặc Restful API
- Được phát triển sử dụng nhiều ngôn ngữ và framework khác nhau như: web thì có React, VueJS, Angular, vv, mobile thì có Java, Kotlin, Swift, React Native, Flutter, vv
2. Máy chủ (web/API server):
- Tiếp nhận mọi yêu cầu từ khách hàng/người dùng, ví dụ khi mình click vào một bài post nào đấy để xem nội dụng thì họ (dùng brower hoặc app) sẽ gởi một yêu cầu qua internet đến server - server sẽ xử lý, lấy dữ liệu ra từ cơ sở dữ liệu rồi trả về để hiển thị nội dung tương ứng
- Có rất nhiều ngôn ngữ (và framework) để phát triển ứng dụng web/API này, PHP (Laravel, Symfony, CakePHP, vv), Python (Flash, Django, CherryPy, vv), Java, Ruby, vv.
- Thường có API document để tiện lợi cho việc phát triển web và mobile
3. Cơ sở dữ liệu (database): lưu trữ và quản lý dữ liệu

Vầy thì FastAPI nằm ở đâu trong này? Chúng ta hãy cùng qua phần tiếp theo nhé!

FastAPI là gì?

Đây là một framework web hiệu suất cao cho ngôn ngữ lập trình Python, chạy trên máy chủ web, được thiết kế để xây dựng các API nhanh chóng và mạnh mẽ. Nó kết hợp sức mạnh của Python với các tính năng hiện đại trong phát triển web để cung cấp hiệu suất tốt và tài liệu API tự động.

Một số đặc điểm quan trọng của FastAPI bao gồm:

  • Hiệu suất cao: FastAPI được xây dựng dựa trên Starlette và Pydantic, cho phép sử dụng khả năng bất đồng bộ của Python để xử lý các yêu cầu đồng thời với hiệu suất cao.
  • Tài liệu API tự động: FastAPI tự động tạo tài liệu API dựa trên các chú thích kiểu Python và OpenAPI. Nó cung cấp giao diện Swagger UI tương tác để khám phá và thử nghiệm các API dễ dàng.
  • Xác nhận kiểu và kiểm tra dữ liệu: Sử dụng Pydantic, FastAPI cho phép xác định kiểu dữ liệu và kiểm tra dữ liệu tự động, giúp bảo đảm dữ liệu được gửi và nhận qua API là hợp lệ.
  • Hỗ trợ Bất đồng bộ: FastAPI hỗ trợ hoàn toàn lập trình bất đồng bộ, cho phép xử lý các hoạt động I/O-bound một cách hiệu quả.
  • Dễ tích hợp và sử dụng: Nó tích hợp dễ dàng với các thư viện và framework khác của Python, giúp các nhà phát triển làm việc với công cụ ưa thích của họ.

FastAPI là một lựa chọn tốt cho việc xây dựng các API mạnh mẽ và tài liệu rõ ràng trong việc phát triển ứng dụng web, các dịch vụ microservices, và các hệ thống backend sử dụng Python.

Vì sao lại là FastAPI?

Ngoài những đặc điểm nổi bật ở mục trước thì chúng ta hãy cùng tham khảo một bảng so sánh giữa các FastAPI và các framework để phát triển web phổ biến khác là Django (Python) và Laravel (PHP) dựa trên một số tiêu chí quan trọng:

Tiêu Chí FastAPI Django Laravel
Ngôn ngữ Python Python PHP
Hiệu suất Cao Trung bình Trung bình
Tài liệu API Tự động, tốt Cần thêm công việc Cần thêm công việc
Xác nhận dữ liệu Tự động, sử dụng Pydantic Có, phần lớn dựa trên Django Forms Có, sử dụng Validation
Hỗ trợ Bất đồng bộ Hoàn toàn Một số phần khác nhau Không
Tính năng mở rộng Tương đối tốt Tốt Tốt
Tính dễ sử dụng Dễ, cú pháp rõ ràng Trung bình Trung bình
Cộng đồng hỗ trợ Đang phát triển mạnh mẽ Rộng lớn, mạnh mẽ Rộng lớn, mạnh mẽ
Mục tiêu chính Xây dựng API Phát triển ứng dụng web chung Phát triển ứng dụng web chung
Năm Release 2018 2005 2011
GitHub FastAPI GitHub Django GitHub Laravel GitHub
GitHub Stars (mới nhất) 64.6k 74k 75.2k

Thứ nhất, FastAPI mới release năm 2018 thôi mà số sao/stars nay đã sát sao những đàn anh chị thậm chí còn sinh ra trước nó hơn 13 năm trước rồi. Điều này đủ chứng tỏ nó đang phát triển rất mạnh mẽ và hot cỡ nào. Nó sẽ sớm vượt mặt các bậc tiền bối trên thôi.

Thứ hai, như ta thấy ở phần giới thiệu và bảng so sánh trên thì tốc độ và hiệu suất cực cao, bằng việc hỗ trợ bất đồng bộ 100% thì nó có thể ngang ngửa cả Go và Node. Còn so với các framework cùng ngôn ngữ hoặc của PHP thì chỉ đi sau hít bụi mà thôi, tốc độ cao, nhanh hơn rất nhiều, có thể tham khảo ở bảng so sánh này:

Thứ ba là nó tích hợp sẵn đến 2 loại API docs, với chỉ vài dòng code để buid validation thôi là đã tự có doc rồi, phải nói là tiện, nhanh, gọn và lẹ.  Như chúng ta đã biết thì trong quá trình phát triển phần mềm - việc có API document là một điều rất quan trọng, giúp quá trình làm việc giữa team frontend/mobile và backend dễ dàng và hiệu quả hơn. FastAPI hiểu điều này và giúp chúng ta đạt được nó một cách rất dễ dàng.

Cuối cùng, và cũng là cái quan trọng nhất, với xu hướng công nghệ hiện nay: AI (trí tuệ nhân tạo) và microservice thì Python là một ngôn ngữ phù hợp nhất. Để phát triển ứng dụng trí tuệ nhân tạo với rất nhiều module logic, analytic và AI đã có sẵn, tha hồ tùy biến và sử dụng; FastAPI cực nhanh và nhẹ nên lựa chọn để phát triển những ứng dụng microservice là điểu hiển nhiên rồi.

Còn các bạn thì sao? Hấp dẫn thế rồi thì mình cùng hấp diêm nó thôi, yeah... :D

Cài đặt FastAPI và tạo ứng dụng CrazyFast

Yêu cầu:
- Python 3.8+
- Có cài sẵn pip

1. Cài đặt

pip install fastapi
pip install "uvicorn[standard]"

Trong đó:
- pip install là lệnh để cài đặt module của Python
- fastapi là module framework FastAPI
- "uvicorn[standard]" là module để chạy web server hiệu suất cao

2. Tạo file main.py

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

3. Chạy ứng dụng

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

4. Kiểm tra

Mở trình duyệt theo link: http://127.0.0.1:8000/items/5?q=somequery
Sẽ trả về JSON như sau:

{"item_id": 5, "q": "somequery"}

5. Tương tác với API docs tự động

Truy cập http://127.0.0.1:8000/docs sẽ có Swagger UI như sau:

Truy cập http://127.0.0.1:8000/redoc sẽ có ReDoc UI như sau:

Để thấy API doc nó tự động tạo ra sao thì hãy update file main.py của chúng ta như sau:

  • Thêm BaseModel từ pydantic
  • Define class Item
  • Thêm 1 API mới update_item và dùng class mới khai báo ở trên vào method mới này

FastAPI hỗ trợ hot reloading (khi chạy với flag --reload ở step 3) nên khi thay đổi và lưu file main.py thì nó sẽ tự động load lại code mới, điều này sẽ tăng đáng kể tốc độ phát triển app, tiết kiệm được time của mình.

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

Bây giờ hay refresh lại API docs (swagger)!

BÙM... API mới đã được tự động thêm vào; request body cũng có y như chính class mình define ở trên luôn. API docs lại có thể tương tác được mà không cần đến Postman hay gì.

Quá nhanh, quá nguy hiểm, quá tiện phải không ạ? Yeah... Á nhầm, rất an toàn và không nguy hiểm chút nào nhé anh em. Hehe...

6. Vầy thì...

Chỉ với vài 3 thao tác cài đặt, 1 đoạn code chỉ tí tẹo vài dòng mà đã tạo được rất rất nhiều thứ mà các ae dev chúng ta rất cần như trên rồi.

Thật tuyệt vời phải không các bạn? Mình đến giờ vẫn luôn ghiền FastAPI và nếu các bạn cũng cảm thấy hứng thú thì hãy tham khảo thêm chi tiết ở đây, còn nhiều điều hấp dẫn hơn đang chờ đón phía trước nữa: https://fastapi.tiangolo.com/

Kết luận

Bạn muốn phát triển một app backend API gọn nhẹ, tốc độ cao, hiện đại và đáp ứng được web với mobile? Bạn muốn theo kịp xu hướng AI và microservice hiện nay ư? Đừng chần chừ gì nữa, hãy chọn FastAPI ngay đi!

Nếu có gì thắc mắc hay thiếu sót, cứ để lại bình luận, chúng ta hãy cùng đàm đạo và tu luyện nhé. Xin chân thành cảm ơn các đạo hữu đã dành thời gian đọc bài viết này. Kính chúc sức khỏe, an khang thịnh vượng, một thập kỷ phát triển bền vững. Chào thân ái.