Hướng dẫn past api python
Lời mở đầuChào các bạn, hôm nay tôi xin giới thiệu với các bạn về 1 framework API mà tôi mới vọc vạch mấy tuần trước. Tại sao tôi lại giới thiệu framework này, âu cũng là do cái slogan của team này bắt mắt quá . Show
Vậy fastAPI là gì, mời các bạn đọc phần tiếp theo. Khái niệmFastApi là 1 web framework dùng để build API có hiệu năng cao, code dễ ẹc, đơn giản nhưng cũng hỗ trợ tốt cho việc làm sản phẩm. Đặc điểm:
Cài đặtYêu cầu: Python 3.6+. FastAPI được build dựa trên OpenAPI (trước có tên Swagger), phần web được support bởi Starlette, còn phần data được support bởi Pydantic. FastAPI CLIĐể cài đặt framework này trên Ubuntu, bạn cần phiên bản python ≥\geq 3.6.
Bạn cũng cần ASGI server khi deploy sản phẩm như Uvicorn hoặc Hypercorn.
Nói sơ qua về ASGI 1 chút, ASGI kế thừa từ WSGI. Mà WSGI là 1 chuẩn giao tiếp giữa web server và Python application server. Trước thì có mod_python của Apache nhưng do không phát triển và không an toàn nên WSGI sinh ra. WSGI có những tác dụng như sau:
Nếu như WSGI là tiêu chuẩn cho các Ok dông dài đủ rồi, chúng ta tiếp tục tìm hiểu xem FastAPI còn cung cấp những tiện ích gì nhé. FastAPI DocsDo based trên OpenAI mà trước đó có tên là Swagger nên FastAPI cung cấp doc có giao diện dễ nhìn, dễ sử dụng. Ví dụ minh họa: Khi bật doc bằng local url 1 giao diện khác của FastAPI docs PerformanceCác bạn có thể test hiệu năng của các web framework trên trang này (https://www.techempower.com/benchmarks/) Optional DepenciesDo FastAPI based trên Pydantic và Starlette nên có hỗ trợ thêm 1 số thư viện có cũng được không có cũng không sao: Pydantic:
Starlette:
FastAPI:
Nếu muốn dùng hết thư viện trên thì bạn chỉ cần dùng 1 câu lệnh đơn giản.
Hướng dẫn cơ bảnCreate a simple APIVề cơ bản thì code dễ như ăn kẹo, bạn tạo 1 file
Sau đó chạy dòng code này để chạy app
P/S:
nếu bạn làm trong môi trường phát triển có thể thêm Tiếp sau đó vào xem thử thành quả phát Ấn vào Giao diện API này được thiết kế dựa trên OpenAPI. Bên đó có hẳn 1 khái niệm để define API gọi là "Schema". Nếu bạn tò mò thì vào link này
Nói chung bạn chỉ cần 6 bước để tạo 1 API
Path ParametersBạn có thể truyền param thông qua đường dẫn.
Biến Path parameters with typesBạn cũng có thể khai báo định dạng của param để trả về khi truyền biến đúng định dạng sẽ trả về giá trị.
Data validationCòn nếu không đúng định dạng thì trả về thông báo. Mọi dữ liệu được validate đều dựa trên Pydantic. OrderNếu bạn có khai báo đường dẫn trùng lặp như thế này:
Thì nhớ để theo thứ tự Path in pathFastAPI hỗ trợ khai báo đường dẫn trong đường dẫn API nhờ vào việc based Starlette.
Query ParametersNếu bạn truyền param dưới dạng key-value thì ở trong FastAPI có hỗ trợ với tên gọi "query" parameters.
Kiểm tra
ở link Nếu bạn để ý skip và limit có format string khi làm đường dẫn nhưng một khi truyền về hàm thì sẽ ngay lập tức được convert từ string về int. Optional parametersNgoài ra FastAPI cung cấp một cách khai báo
Như bạn thấy
ở trên param truyền ở đường dẫn là Bạn có thể test bằng đường dẫn sau.
Query parameter type conversionThay đổi giá trị mặc định bằng cách truyền giá trị trên đường dẫn.
Trong trường hợp này
Multiple path and query parametersVới các đường dẫn lồng nhau, FastAPI biết param nào với param nào dựa trên tên param.
Required query parametersĐơn giản là bạn điền thiếu param trên đường dẫn sẽ báo lỗi
Như hình dưới này, tôi chỉ truyền vào giá trị của Request Body
Để khai báo format của request body, bạn cần sử dụng Pydantic Models
Ví dụ về 1 instance của class Item.
Do
Dựa trên việc import Pydantic module, FastAPI hỗ trợ:
Use modelTrong hàm create_item, bạn có thể tùy biến các biến của class Item,
đơn giản như việc tính phí chịu thuế bằng cách tính tổng
Request body + path parametersFastAPI hỗ trợ khai báo tham số URL và request body cùng lúc, framework sẽ biết tham số nào truyền từ đường dẫn và tham số nào lấy từ request.
P/S: tương tự như trên bạn có thể thêm tham số URL, tham số query và request body cùng lúc. Query Parameters and String ValidationsỞ phần trước chúng ta đã biết khái niệm của query parameter rồi, lạ 1 loại param có cũng được không có cũng không sao. Param này có attribute là
Câu lệnh
Query parameter list / multiple valuesNgoài định dạng string và integer, FastAPI còn hỗ trợ type List.
Response body mà API trả về.
API cũng được cập nhật theo.
P/S:
bạn cũng có thể thay
Query còn 1 vài param nữa nhưng không quá quan trọng, bạn có thể vào doc của FastAPI để tìm hiểu chi tiết. Các param mà Query cung cấp: Metadata
Validation cho string:
Path Parameters and Numeric ValidationsQuery parameters có class Query để khai báo metadata và validations, Path parameters có class Pass với cơ chế tương tự. Thêm
Number validations: greater than or equalChúng ta không chỉ có thể validate string mà còn validate được number. Với param
Number validations: greater than and less than or equalTương tự với
P/S: Number validations không chỉ hỗ trợ type integer mà còn hỗ trợ cho type float.
BodyMultiple ParametersĐơn giản là FastAPI hỗ trợ tạo format cho request body, bạn có thể dùng không chỉ 1 mà là N Pydantic model như ví dụ dưới, tôi khai báo 2 class
Singular values in bodyBạn cũng có thể thêm define 1 body cho chỉ 1 giá trị mà không cần khai báo class, giả dụ ở đây tôi thêm
1 param là
Multiple body params and queryNói đơn giản là kết hợp multiple body param với query param.
FieldĐể validate data hoặc thêm metadata trong 1 class giả dụ
Như đoạn code ở trên param Nested ModelsNgoài các kiểu int, float, str, bạn còn có thể thêm kiểu list hay set như dưới đây.
Với cách khai báo trên, khi post bạn truyền param là 1 list, nhưng với cách khai báo trên thì list này sẽ không xác định kiểu định dạng của từng phần tử trong list. Không sao bởi Python có module
Tương tự với
Ngoài ra các kiểu normal như str, int, float, ... FastAPI cũng hỗ trợ thêm các định dạng phức tạp và đa dạng hơn, giả sử định dạng
Giả sử tôi có 2 class Images và Item.
Tôi muốn class Images nằm trong class Item như thế này.
Bạn chỉ cần thêm 1 dòng code vào class Item. Easy !
Bạn cũng có thể tùy biến định dạng của Pydantic models là list hoặc set chẳng hạn.
Và đây là kết quả.
Trên lý thuyết bạn có thể lặp đi lặp lại các models lồng nhau như sau. Class Image nằm trong class Item, class Item thì lại nằm trong class Offer.
Kết luậnDo FastAPI là 1 framework API mới, có rất nhiều tính năng nên tôi chia ra thành nhiều phần (căn bản do không đủ kiên nhẫn để viết ). Ở đây tôi sẽ chỉ liệt kê các tính năng quan trọng dùng nhiều trước rồi sau đó sẽ nâng cao lên trong các phần tiếp theo. Bạn cũng có thể xem thẳng trên doc của fastapi. Link tham khảo here:
|