Chúng ta sẽ cài đặt FastAPI vào thư mục “môi trường ảo” (venv). Việc sử dụng môi trường ảo giúp cô lập các thư viện của dự án này, tránh xung đột với các dự án khác trên máy tính.
- Tại cửa sổ dòng lệnh (CMD), di chuyển dấu nhắc lệnh vào thư mục Ebook2LateX, kích hoạt môi trường ảo:
D:\DuAn\Ebook2LateX>venv\scripts\activate
(venv) D:\DuAn\Ebook2LateX>
- Gõ lệnh sau để cài đặt FastAPI: pip install "fastapi[all]"
(venv) D:\DuAn\Ebook2LateX>pip install "fastapi[all]"
Tham số “all” sẽ cài đặt luôn các thư viện bổ trợ cần thiết như uvicorn, pydantic, và các công cụ hỗ trợ xử lý dữ liệu form.
Uvicorn là gì?
Uvicorn là phần mềm web server, dùng để chạy các ứng dụng web viết bằng Python, hỗ trợ xử lý bất đồng bộ (ASGI - Asynchronous Server Gateway Interface).
Pydantic là gì?
Pydantic là một thư viện Python dùng để kiểm tra dữ liệu (validation) và xác thực dữ liệu (parsing) dựa trên các gợi ý kiểu (type hints).
Sau khi cài đặt xong, bạn nên chạy lệnh pip freeze > requirements.txt ở thư mục gốc để ghi lại danh sách các thư viện, giúp việc triển khai lên Docker sau này được đồng bộ. Như vậy trong dự án sẽ có 2 tập tin requirements.txt, một tập tin trong thư mục backend và một trong thư mục gốc. Bạn nên đọc thêm về mục đích của 2 tập tin requirements.txt này.
Viết đoạn mã nguồn đầu tiên (Hello World)
Trong thư mục backend, tạo tập tin có tên main.py và nhập vào đoạn mã sau (bạn nên tự tay gõ lại để nhớ và hiểu mã nguồn):
[main.py]
# Goi thu vien FastAPI
from fastapi import FastAPI
# Tao doi tuong app tu class FastAPI
app = FastAPI()
# Tao decorator cho app.get(“/”)
@app.get("/")
# khi nguoi dung truy cap vao web root, goi ham sau
def read_root():
return {"message": "Chao mung ban den voi Ebook2LateX!"}
Khởi chạy ứng dụng
Trở lại chương trình dòng lệnh (CMD), chạy lệnh sau để khởi động phần mềm web server:
uvicorn main:app --reload
Trong đó,
- main: là tên tập tin (main.py)
- app: là biến được khởi tạo trong code (app = FastAPI())
- --reload: Chế độ tự động tải lại server khi bạn thay đổi mã nguồn (rất hữu ích khi đang phát triển)
Nếu cửa sổ dòng lệnh xuất các thông tin sau là web server đã khởi chạy thành công:
…
←[32mINFO←[0m: Started server process [←[36m62384←[0m]
←[32mINFO←[0m: Waiting for application startup.
←[32mINFO←[0m: Application startup complete.
(Đừng tắt cửa sổ dòng lệnh này, nếu tắt là tắt web server).
Kiểm tra kết quả
Sau khi khởi chạy ứng dụng thành công, bạn có thể mở trình duyệt web, truy cập vào địa chỉ sau:
http://127.0.0.1:8000
Bạn sẽ thấy câu chào mừng trên trình duyệt:
["Chao mung ban den voi Ebook2LateX!"]
Thực hiện commit trạng thái của dự án vào Git
D:\DuAn\Ebook2LateX>git status
backend/main.py
requirements.txt
D:\DuAn\Ebook2LateX>git add .
D:\DuAn\Ebook2LateX>git commit -m "feat: cai dat FastAPI"
9.3 Bài tập và câu hỏi
Bài tập
Bài tập 9a. Cài đặt các nội dung trong phần lý thuyết.
Bài tập 9b. Sử dụng File Explorer, tìm trong thư mục dự án (Ebook2LateX) và cho biết: sau khi cài đặt, mã nguồn của framework FastAPI được lưu ở đâu?
Câu hỏi
Câu 9.1 Web services là gì?
A. Là một loại phần cứng dùng để lưu trữ dữ liệu trên Internet
B. Là dịch vụ do thiết bị điện tử này cung cấp cho thiết bị điện tử khác thông qua môi trường mạng (WWW, HTTP)
C. Là một ngôn ngữ lập trình mới dùng để xây dựng giao diện người dùng
D. Là một hệ điều hành dành riêng cho các máy chủ lưu trữ tập tin PDF
Câu 9.2 Tại sao trong một dự án web, Backend và Frontend lại cần trao đổi dữ liệu thông qua định dạng JSON hoặc XML?
A. Vì đây là các định dạng giúp tăng dung lượng lưu trữ của ổ cứng
B. Vì đây là các ngôn ngữ lập trình có thể thực hiện các phép toán phức tạp
C. Vì đây là các định dạng dữ liệu chuẩn giúp các hệ thống khác nhau (như Python và React) có thể hiểu và làm việc với nhau
D. Vì các định dạng này giúp mã hóa dữ liệu để không ai có thể đọc được
Câu 9.3 Ai là người đã phát hành phiên bản đầu tiên của FastAPI vào năm 2018?
A. Guido van Rossum
B. Sebastián Ramírez
C. Mark Zuckerberg
D. Brendan Eich
Câu 9.4 Đặc điểm nào sau đây giúp FastAPI đạt được hiệu suất cao tương đương với Go hoặc Node.js?
A. Sử dụng giao thức SOAP để truyền tin
B. Dựa trên nền tảng Starlette, Pydantic và hỗ trợ lập trình bất đồng bộ (async)
C. Chỉ chạy được trên các máy chủ có cấu hình phần cứng cực mạnh
D. Không cần sử dụng bất kỳ thư viện hỗ trợ nào từ bên thứ ba
Câu 9.5 ASGI (Asynchronous Server Gateway Interface) là gì?
A. Là một thư viện dùng để vẽ biểu đồ toán học trong Python
B. Là chuẩn giao diện hỗ trợ lập trình bất đồng bộ cho các web server và ứng dụng Python
C. Là một hệ quản trị cơ sở dữ liệu thay thế cho PostgreSQL
D. Là một công cụ dùng để đóng gói ứng dụng vào Docker
Câu 9.6 Uvicorn đóng vai trò gì trong dự án web viết bằng Python?
A. Là một framework để viết mã nguồn Frontend
B. Là một hệ quản trị cơ sở dữ liệu quan hệ
C. Là một máy chủ Web (Web Server) chuẩn ASGI dùng để chạy ứng dụng FastAPI
D. Là trình soạn thảo mã nguồn chuyên dụng cho Python
Câu 9.7 Khi bạn thực hiện lệnh uvicorn main:app --reload trong terminal, tham số --reload có tác dụng gì đối với quá trình phát triển dự án?
A. Tự động cài đặt lại toàn bộ thư viện trong requirements.txt
B. Tự động sao lưu dữ liệu từ PostgreSQL sang một tập tin khác
C. Tự động phát hiện thay đổi trong mã nguồn và khởi động lại server để áp dụng thay đổi ngay lập tức
D. Xóa bỏ các tập tin rác trong thư mục venv/
Câu 9.8 Trong Python, "Decorator" thường được nhận diện bằng ký hiệu nào đặt ngay phía trên định nghĩa hàm?
A. Dấu #
B. Dấu $
C. Dấu &
D. Dấu @
-----