mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
![]() |
# REST API
|
||
|
|
||
|
Plugins can declare custom endpoints on NetBox's REST API to retrieve or manipulate models or other data. These behave very similarly to views, except that instead of rendering arbitrary content using a template, data is returned in JSON format using a serializer. NetBox uses the [Django REST Framework](https://www.django-rest-framework.org/), which makes writing API serializers and views very simple.
|
||
|
|
||
|
First, we'll create a serializer for our `Animal` model, in `api/serializers.py`:
|
||
|
|
||
|
```python
|
||
|
from rest_framework.serializers import ModelSerializer
|
||
|
from netbox_animal_sounds.models import Animal
|
||
|
|
||
|
class AnimalSerializer(ModelSerializer):
|
||
|
|
||
|
class Meta:
|
||
|
model = Animal
|
||
|
fields = ('id', 'name', 'sound')
|
||
|
```
|
||
|
|
||
|
Next, we'll create a generic API view set that allows basic CRUD (create, read, update, and delete) operations for Animal instances. This is defined in `api/views.py`:
|
||
|
|
||
|
```python
|
||
|
from rest_framework.viewsets import ModelViewSet
|
||
|
from netbox_animal_sounds.models import Animal
|
||
|
from .serializers import AnimalSerializer
|
||
|
|
||
|
class AnimalViewSet(ModelViewSet):
|
||
|
queryset = Animal.objects.all()
|
||
|
serializer_class = AnimalSerializer
|
||
|
```
|
||
|
|
||
|
Finally, we'll register a URL for our endpoint in `api/urls.py`. This file **must** define a variable named `urlpatterns`.
|
||
|
|
||
|
```python
|
||
|
from rest_framework import routers
|
||
|
from .views import AnimalViewSet
|
||
|
|
||
|
router = routers.DefaultRouter()
|
||
|
router.register('animals', AnimalViewSet)
|
||
|
urlpatterns = router.urls
|
||
|
```
|
||
|
|
||
|
With these three components in place, we can request `/api/plugins/animal-sounds/animals/` to retrieve a list of all Animal objects defined.
|
||
|
|
||
|

|
||
|
|
||
|
!!! warning
|
||
|
This example is provided as a minimal reference implementation only. It does not address authentication, performance, or myriad other concerns that plugin authors should have.
|