Quick Start
Create a new API resource in three simple steps:src/ralph/api/__init__.py:1 for available base classes.
Core Components
RalphAPISerializer
The base serializer class provides comprehensive features for Ralph models. Built-in Features:-
Automatic URL and PK fields: Both object primary key and URL are included automatically (see
ralph.api.serializers.RalphAPISerializer.get_default_field_names:34for implementation) - Context propagation: Every sub-serializer has the current context set, even when instantiated directly as a field
-
Reversed choice fields: All choice fields use
ReversedChoiceField, allowing values by name instead of key. Works seamlessly withdj.choices.Choices -
Field-level permissions: Uses
PermissionsPerFieldSerializerMixinto return only fields the user has access to. View-only permissions are handled as read-only fields - Object-level permissions for relations: Related field models with object-level permissions only show accessible objects
-
Model validation: Data is validated using the model’s
clean()method. Disable with_validate_using_model_clean = Falsein your serializer
src/ralph/virtual/api.py:119 for a real implementation.
RalphAPISaveSerializer
For write operations (POST, PUT, PATCH), useRalphAPISaveSerializer which simplifies relation handling:
src/ralph/virtual/api.py:84 for the complete example.
RalphAPIViewSet
The base viewset class handles permissions, filtering, and query optimization. Built-in Features:-
Automatic save serializer: Default serializer for POST/PUT/PATCH uses
PrimaryKeyRelatedFieldfor all relations. Override withsave_serializer_classattribute -
Query optimization: Includes
QuerysetRelatedMixinfor easyselect_relatedandprefetch_related. Defaults to admin site’slist_select_related -
Admin integration: Through
AdminSearchFieldsMixin, search fields are automatically taken from the related admin site -
Comprehensive permissions: Includes
RalphPermissionchecking:- User authentication (
IsAuthenticated) - Object-level permissions (
ObjectPermissionsMixin) - Django admin permissions (
add_*,change_*,delete_*)
- User authentication (
src/ralph/virtual/api.py:249 for the complete implementation.
Filter Backends
RalphAPIViewSet includes powerful filtering capabilities through multiple filter backends:
DjangoFilterBackend
Provides basic filtering for Django models. Filter fields are automatically associated with the model’s admin configuration.PermissionsForObjectFilter
Limits results to objects the user has at least view permission for.ExtendedFiltersBackend
Allows filtering multiple fields using a single query parameter. Especially useful for polymorphic models:GET /api/cloud-hosts/?name=abc resolves to:
src/ralph/virtual/api.py:277 for an example.
LookupFilterBackend
Filter by Django lookups using__ convention:
TagsFilterBackend
Filter queryset by tags. Multiple tags can be specified:OrderingFilter
Order queryset using theordering URL parameter:
Polymorphic Models
Polymorphic models automatically support lookup filters and extended filters:extended_filter_fields (asset__hostname, ip__address, cloudhost__hostname) to see if any start with “abc”.
Router Registration
All viewsets must be registered with Ralph’s router:src/ralph/virtual/api.py:353 for registration examples.
Advanced Patterns
Custom Destroy Logic
Implement custom deletion behavior with force delete option:src/ralph/virtual/api.py:200 for the implementation.
Query Annotations
Add computed fields to querysets:src/ralph/virtual/api.py:343 for the complete example.
Best Practices
-
Always use Ralph base classes: Use
RalphAPISerializerandRalphAPIViewSetfor consistency and built-in features -
Optimize queries: Define
select_relatedandprefetch_relatedto avoid N+1 queries -
Separate read/write serializers: Use
serializer_classfor reads andsave_serializer_classfor writes -
Leverage extended filters: For polymorphic models, define
extended_filter_fieldsto enable unified searching - Test permissions: Ensure field-level and object-level permissions are working as expected
- Document custom endpoints: Add docstrings to custom actions and methods
Related Documentation
- Custom Fields - Adding custom fields to models
- Permissions - Understanding Ralph’s permission system
- Admin Customization - Customizing the admin interface