I quite often find myself in need of a REST API which does this or that. Yet if enough time pass between me making an REST API in Django I feel I have to start over and learn the process again. Here I’ve outlined a very basic calculator API which can add, subtract and multiply floating numbers.
I assume that you have python and virtualenv installed and you are working on a system with a proper commandline interface.
The Environment
Setting up the environment is just a few steps. First make a virtual environment for us to work in and start the django project.
$ pipenv install django django-settings-cmd
$ pipenv shell
(calc)$ django-admin startproject calc_api
(calc)$ cd calc_api/
(calc)$ django-admin startapp calc
(calc)$ django-settings-enable-app calc
Add the calc app urls to the global list of urls in calc_api/urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^calc/', include('calc.urls')),
url(r'^admin/', admin.site.urls),
]
Create the list of endpoints in the calc app (calc/urls.py)
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^add$', views.add, name='add'),
url(r'^sub$', views.add, name='sub'),
url(r'^mul$', views.add, name='mul'),
]
Create the calc app endpoints in the calc/views.py
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse, Http404
def getFloatParam( name, request ):
try:
val = request.GET[name]
except:
raise Http404( "Missing parameter %s"%name )
try:
fval = float( val )
except:
raise Http404( "Parameter %s is not a float value"%name )
return fval
def add(request):
left = getFloatParam( "left", request )
right = getFloatParam( "right", request )
return JsonResponse( {"result":left + right} )
def sub(request):
left = getFloatParam( "left", request )
right = getFloatParam( "right", request )
return JsonResponse( {"result":left - right} )
def mul(request):
left = getFloatParam( "left", request )
right = getFloatParam( "right", request )
return JsonResponse( {"result":left * right} )
Now lets get things running
(calc)$ ./manage.py migrate
(calc)$ ./manage.py runserver
(calc)$ open "http://127.0.0.1:8000/calc/add?left=1.5e2&right=2"