When using Django REST Framework (DRF), routers.DefaultRouter() automatically generates a browsable HTML API root page listing registered viewsets. However, when building production public APIs, you often need to customize the API root response to include API versioning, documentation links, or custom status endpoints.
Method 1: Custom APIView Class for API Root
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.reverse import reverse
class CustomAPIRootView(APIView):
"""
Custom API Root Index Endpoint providing hyperlinked navigation
"""
def get(self, request, format=None):
return Response({
'status': 'healthy',
'api_version': 'v1.0',
'users': reverse('user-list', request=request, format=format),
'products': reverse('product-list', request=request, format=format),
'documentation': 'https://api.example.com/docs/'
})Method 2: Subclassing DefaultRouter in urls.py
from rest_framework.routers import DefaultRouter
from .views import CustomAPIRootView, UserViewSet
class CustomRouter(DefaultRouter):
APIRootView = CustomAPIRootView
router = CustomRouter()
router.register(r'users', UserViewSet, basename='user')
urlpatterns = router.urls
Comments and corrections