https://github.com/salesforce/django-declarative-apis
Simple, readable, declarative APIs for Django
https://github.com/salesforce/django-declarative-apis
django python rest-api
Last synced: 4 months ago
JSON representation
Simple, readable, declarative APIs for Django
- Host: GitHub
- URL: https://github.com/salesforce/django-declarative-apis
- Owner: salesforce
- License: bsd-3-clause
- Created: 2019-07-12T16:50:10.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2025-04-03T00:36:13.000Z (about 1 year ago)
- Last Synced: 2025-04-08T09:51:59.318Z (12 months ago)
- Topics: django, python, rest-api
- Language: Python
- Homepage: https://django-declarative-apis.readthedocs.io/en/stable/
- Size: 550 KB
- Stars: 27
- Watchers: 9
- Forks: 13
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: contributing.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
- Authors: AUTHORS
Awesome Lists containing this project
README
[](https://django-declarative-apis.readthedocs.io/en/stable/?badge=stable)
Overview
========
django-declarative-apis is a framework built on top of Django aimed at teams implementing RESTful APis. It provides a simple interface to define endpoints declaratively. Some benefits to using django-declarative-apis:
- Define endpoints declaratively
- Define model-bound and unbound resource endpoints with a consistent interface
- OAuth 1.0a authentication out of the box
- Define resource and endpoint-bound tasks, promoting modularity
- Define synchronous and asynchronous tasks (asynchronous tasks implemented with Celery)
- Separation of concerns between request body processing and business logic
Quick start
===========
This guide is intended to demonstrate the bare minimum in order to get a django-declarative-apis project up and running. The example directory contains further examples using endpoint to model relationships, authentication and response attribute filtering.
Create django app
-----------------
``` sourceCode
./manage startapp myapp
```
Add app to INSTALLED\_APPS
--------------------------
``` python
INSTALLED_APPS = [
'django_declarative_apis',
'myapp',
]
```
Add required config
-------------------
``` python
DECLARATIVE_ENDPOINT_RESOURCE_ADAPTER = 'django_declarative_apis.adapters.EndpointResource'
DECLARATIVE_ENDPOINT_AUTHENTICATION_HANDLERS = 'django_declarative_apis.authentication.oauthlib.oauth1.TwoLeggedOauth1'
```
myapp/urls.py
-------------
``` python
from django_declarative_apis import adapters
import myapp.resources
class NoAuth:
@staticmethod
def is_authenticated(request):
return True
urlpatterns = [
url(
r'^ping$',
adapters.resource_adapter(
get=myapp.resources.PingDefinition,
authentication=NoAuth
)
),
]
```
myproject/myproject/urls.py
---------------------------
``` python
from django.conf.urls import url, include
import myapp.urls
urlpatterns = [
url(r'^', include(myapp.urls)),
]
```
myapp/resources.py
------------------
``` python
from django_declarative_apis import machinery
class PingDefinition(machinery.BaseEndpointDefinition):
def is_authorized(self):
return True
@property
def resource(self):
return {'ping': 'pong'}
```
Optional: Implement Custom Event Hooks for Event Emission
-----
```bash
# settings.py
DDA_EVENT_HOOK = "my_app.hooks.custom_event_handler"
```