Django REST Framework: Web API cho Django
Django REST Framework biến một ứng dụng Django thành một JSON API mà không phải tự viết tay phần parse request, phân trang hay kiểm tra quyền trong từng view. Serializer và viewset loại bỏ phần lớn việc lặp lại đó, còn browsable API cho bạn click qua endpoint trên trình duyệt thay vì dùng curl. Nó chỉ đáng dùng khi API nằm trên ORM của Django — gắn vào backend khác, bạn sẽ phải chống lại framework nhiều hơn là được nó giúp.
Django REST Framework là gì?
Django REST Framework là một bộ công cụ gắn vào một dự án Django có sẵn để thêm lớp REST API — serializer để chuyển instance của model thành JSON và ngược lại, viewset và router để nối các endpoint, cùng các class authentication và permission để bảo vệ chúng. Nó nằm trên Django chứ không thay thế Django, nên ORM, trang admin và cấu trúc app vẫn giữ nguyên; REST framework chỉ thêm vào phần bề mặt API.
Tính năng cốt lõi của Django REST Framework
- ✓Serializer chuyển queryset của Django ORM thành JSON và ngược lại — HyperlinkedModelSerializer và ModelSerializer đọc trực tiếp các field của model từ class Meta.
- ✓ViewSet kết hợp với DefaultRouter tự sinh ra URL cho list, detail, create, update, delete chỉ từ một class được đăng ký, thay vì phải viết từng path() riêng.
- ✓Browsable API hiển thị endpoint dưới dạng trang web tương tác, có cả nút đăng nhập để test các request cần authentication mà không cần client riêng.
- ✓Authentication có sẵn trong framework, cộng thêm các gói tùy chọn cho OAuth1a và OAuth2 khi session hay token auth thông thường chưa đủ.
- ✓Function-based view thuần vẫn dùng được nếu bạn không muốn dùng viewset hay generic view — README nói rõ đây là một lối thoát khi cần.
- ✓Nguồn dữ liệu không phải ORM cũng được hỗ trợ qua class Serializer cơ bản, không chỉ model Django qua ModelSerializer.
Khi nào nên dùng Django REST Framework
- •Thêm JSON API vào một ứng dụng Django đã có sẵn model, mà không cần đổi sang framework khác.
- •Dựng CRUD endpoint nhanh: đăng ký một ModelViewSet với DefaultRouter là có ngay list/detail/create/update/delete.
- •Cần authentication nhiều hơn một scheme token tự chế — session auth có sẵn, còn OAuth1a/OAuth2 chỉ cách một gói tùy chọn.
- •Cho phép frontend hay QA click thử endpoint ngay trên trình duyệt thay vì phải viết curl cho từng lần kiểm tra thủ công.
Cài đặt Django REST Framework
Cài bằng pip: `pip install djangorestframework`. Sau đó thêm `'rest_framework'` vào `INSTALLED_APPS` trong settings của Django — đó là toàn bộ phần cấu hình cần trước khi bạn bắt đầu viết serializer và viewset. README ghi yêu cầu Python 3.10+ và Django 5.2, 6.0 hoặc 6.1, và chỉ chính thức hỗ trợ bản patch mới nhất của mỗi nhánh.
Xây dựng một API đơn giản với DRF
Ví dụ trong chính README là minh hoạ rõ nhất: định nghĩa một class serializer (chẳng hạn HyperlinkedModelSerializer) với class Meta khai báo model và các field cần expose, định nghĩa một ModelViewSet ghép queryset với serializer đó, rồi đăng ký viewset lên một DefaultRouter và include urls của router vào urlpatterns. Chạy `./manage.py runserver` là endpoint đã hoạt động — bạn có thể mở thẳng trên trình duyệt, đăng nhập qua nút đăng nhập, hoặc gọi bằng curl từ command line. Không cần viết tay từng path(), không cần tự encode JSON. Mọi thứ chạy ngay khi các phần đã được nối đúng.
Điểm mạnh
- ✓Bộ ba serializer-viewset-router, được minh hoạ ngay trong ví dụ của README, biến một model thành một JSON API list/detail hoạt động được chỉ trong khoảng hai mươi dòng code.
- ✓Đăng nhập, submit form và xem response đều làm được ngay trên trình duyệt thay vì dùng curl cho từng lần kiểm tra thủ công.
- ✓Function-based view vẫn là một lối thoát — bạn không bị ép phải dùng viewset hay generic view nếu view thuần phù hợp hơn với việc cần làm.
- ✓Repo có sẵn security policy cùng badge CI công khai và coverage, dấu hiệu của một dự án đang được duy trì chứ không phải bị bỏ rơi.
Hạn chế của Django REST Framework
- △Django REST Framework chỉ chạy được bên trong một dự án Django — không có chế độ standalone, nên bạn phải gánh theo ORM, settings module và app registry của Django chỉ để có lớp REST.
- △Yêu cầu phiên bản khá hẹp: Python 3.10+ và Django 5.2, 6.0 hoặc 6.1, chỉ chính thức hỗ trợ bản patch mới nhất của mỗi nhánh — stack cũ hơn phải tự lo.
- △OAuth1a và OAuth2 không có sẵn; README liệt kê chúng là gói tùy chọn, nên muốn token-based auth là phải thêm dependency khác.
- △Ngoài phần quickstart, README dẫn ra tài liệu bên ngoài cho các loại serializer, permission và phân trang thay vì trình bày ngay trong repo.
Các lựa chọn thay thế cho Django REST Framework
Câu hỏi thường gặp
Django REST Framework có mặt công khai trên GitHub và cài đặt miễn phí bằng pip install djangorestframework. Điều khoản license cụ thể không được nêu trong metadata cơ bản của dự án, nên hãy kiểm tra file LICENSE trong repo trước khi dùng cho sản phẩm thương mại.
README của Django REST Framework ghi yêu cầu Python 3.10+ và Django 5.2, 6.0 hoặc 6.1, chỉ chính thức hỗ trợ bản patch mới nhất của mỗi nhánh. Phiên bản Python hay Django cũ hơn nằm ngoài phạm vi được tài liệu hoá là hỗ trợ.
Django REST Framework có sẵn các authentication policy, còn README liệt kê thêm các gói tùy chọn cho OAuth1a và OAuth2 khi cần token-based auth ngoài phần mặc định. Ví dụ quickstart cũng nối sẵn rest_framework.urls để browsable API có nút đăng nhập riêng.
Serializer của Django REST Framework hỗ trợ cả dữ liệu từ Django ORM qua ModelSerializer lẫn đối tượng Python thuần không qua ORM qua class Serializer cơ bản, theo README. Đây chính là cơ chế giúp framework tách rời khỏi ORM khi bạn cần.
Browsable API là giao diện web có sẵn của Django REST Framework để xem và test endpoint trực tiếp trên trình duyệt, kèm nút đăng nhập cho các thao tác cần authentication như tạo hay xoá record. README mô tả đây là một điểm cộng về usability so với chỉ thao tác endpoint qua công cụ dòng lệnh như curl.
Trong Django REST Framework, một class serializer định nghĩa những field nào của model được expose ra JSON — ví dụ trong README dùng HyperlinkedModelSerializer với class Meta liệt kê các field như username, email và is_staff. Cùng một serializer đó chuyển queryset thành JSON khi trả về, và validate JSON gửi vào ngược lại thành dữ liệu model.
Vấn đề mà nó giải quyết
Django cung cấp model và view, nhưng không có sẵn lớp REST: biến một model thành JSON theo cách thông thường nghĩa là phải tự viết tay phần serialization, phân trang và kiểm tra quyền trong từng view. Django REST Framework thay thế phần code lặp lại đó bằng serializer, viewset và router, được gắn vào đúng cơ chế INSTALLED_APPS mà Django đã có sẵn, nên việc thêm một API không có nghĩa là phải dựng thêm một hệ thống song song bên cạnh ứng dụng Django.
Ai nên dùng — và ai nên bỏ qua
Nên thử nếu bạn đã xây dựng trên Django và cần expose model ra JSON — con đường ModelViewSet cộng DefaultRouter dựng được một CRUD API chỉ trong một buổi chiều. Nên bỏ qua nếu bạn không dùng Django: không có chế độ framework-agnostic, nên chọn DRF cho lớp API cũng đồng nghĩa phải chọn Django bên dưới. Cũng nên bỏ qua nếu stack của bạn cũ hơn yêu cầu của README — Python dưới 3.10 hay Django dưới 5.2 đã nằm ngoài các phiên bản được hỗ trợ ngay từ đầu.
Repo liên quan
Vẫn đang phân vân về django-rest-framework?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về django-rest-framework.
