Từ khi biết tới OpenAPI (Swagger) là mình đã mê cách viết tài liệu API có khả năng tương tác. Cực kỳ rõ ràng, xúc tích, dễ hiểu, chỉ cần gởi đường link về tài liệu API là đối tác hay lập trình viên đều có thể tương tác với API, theo cách không thể tuyệt vời hơn. Và càng thích thú hơn nữa khi mình biết tới FastAPI, tạo API chuẩn, đầy đủ tính năng ngon và cực nhanh lại còn tạo ra tài liệu chuẩn OpenAPI. Bài viết này sẽ giới thiệu về FastAPI, framework tạo API trên Python thuộc nhóm nhanh nhất hiện nay.

Giới thiệu FastAPI

FastAPI thiết kế API nhanh và chuẩn

FastAPI là nền tảng thiết kế, lập trình xây dựng API cực kỳ nhanh trên cả 2 phương diện phát triển và thực thi trên Python 3.6+.

Trang chủ: FastAPI

Từ Python 3.6+ thì bạn đã có thể sử dụng cú pháp await/async để chạy code bất đồng bộ, vì lý do này các framework trên Python sẽ đạt được hiệu năng cao, FastAPI là một trong số Python framework nhanh nhất hiện nay.

Với một thời gian tìm hiểu kha khá, mình xác định dự án tới về API sẽ sử dụng FastAPI.

Các tính năng chính

  • Nhanh: hiệu suất thực thi rất cao, có thể cạnh tranh được với Nodejs và Go
  • Phát triển nhanh: nâng cao tốc độ lập trình từ 200% đến 300%
  • Ít lỗi: giảm 40% lỗi do tích hợp ràng buộc dữ liệu khá tốt
  • Trực quan: hỗ trợ bộ soạn thảo tốt với Completion bao phủ.
  • Dễ dàng: được thiết kế để dễ dàng học và sử dụng
  • Ngắn gọn: tối giản hoá sự trùng lặp code.
  • Vững chãi: code đạt mức production, với khả năng tương tác API trên tài liệu
  • Quy chuẩn: thiết kế hoàn toàn dựa trên OpenAPI và JSON schema

Trên đây là các yếu tố được quảng cáo bởi chính FastAPI, tuy nhiên mình cũng xác nhận rằng 60~70% là có thể tin được. Còn tốc độ lập trình và ít lỗi thì còn phụ thuộc vào khả năng code nữa.

Điểm hay nữa của FastAPI chính là tài liệu đầy đủ và ví dụ rõ ràng, dễ hiểu phủ toàn bộ về cách xử lý các thành phần trong request, cho đến xử lý form, tập tin, và bảo mật.

Thực hành viết API

Chúng ta sẽ thử viết api đơn giản thao tác với db sqlite.

Môi trường và thư viện đi kèm

Viết code

File db.py: mục đích là để tạo ra db SQLite

Chạy python db.py, nếu không có lỗi gì hết thì file “test.db” sẽ được tạo ra.

Mở file “test.db” bằng DB Browser for SQLite:

SQLite DB

File main.py

Chạy ứng dụng với lệnh uvicorn main:app --reload, sau đó bạn có thể sử dụng API ở http://127.0.0.1:8000/todos.

Điểm đặc biệt như đã nói ở trên, là bạn có thể xem và thao tác với API thông qua trang tài liệu của chính ứng dụng ở http://127.0.0.1:8000/docs, hoặc http://127.0.0.1:8000/redoc.

Docs với OpenAPI được tạo ra bởi FastAPI

Fullstack Station Tips

Vài điểm cần lưu ý:

  • Về Graphql: Graphql được dựa chính trên Starlette và Graphene, vì vậy nếu dự án thiên về Graphql thì FastAPI không mang lại nhiều ý nghĩa. Nếu dùng graphql trên python, bạn có thể sử dụng Graphene và kết hợp với bất kỳ nền tảng nào cũng được như Flask, Django.
  • Như đã từng giới thiệu về Graphql (xem Graphql là gì), thì API Restful thực sự có nhiều điểm bất lợi hơn, bạn hãy cân nhắc kỹ ứng dụng của mình nên sử dụng Restful hay Graphql
  • Để kích hoạt hiệu suất cao nhất, bạn cần sử dụng driver async tương ứng với DB sử dụng. Ví dụ với MongoDB thì nên dùng https://github.com/mongodb/motor.

Comments