(二)Django REST实践:最简单的REST API实现

本小节大概要花费10分钟。

在前面,我们已经学会了Django如何获得HTTP请求中的内容,以及如何获取HTTP请求的body。接下来我们就来写一个最简单的API。这个API要求在请求的HTTP body中放入JSON格式的文本,并在解析文本后进行处理,返回JSON格式的数据。


功能描述

我们定义 API的URL为/api/sum/,功能是为两个数求和,并返回。

request中body的格式为:

{
    "var1": ,
    "var2": 
} 

response的格式为:

{
    "err_code": ,
    "message": ,
    "data": {
        "sum": 
    }
}

response中,我们的数据结构稍微有点复杂。

  1. err_code用来返回错误代码,如果请求成功,则err_code为0,否则为-1。当然你也可以自己定义不同的err_code,以表示不同类型的错误。
  2. message是用来辅助理解请求返回内容的。如用户注册时,成功时message为"Success",失败了可以返回失败的原因,如"Username already exists"等。
  3. data用来装载请求返回的数据。在这个例子中是sum。

之后我们所有的REST API都会以这种统一的格式返回数据,两个不同REST API所返回内容的主要区别在data域上。


功能实现

在(一)中,我们建立了一个叫做task_platform的Django项目。目录结构如下:

task_platform项目目录结构

进入Django项目目录,并编辑task_platform中的views.py文件。

# task_platform/views.py

import json

from django.http import JsonResponse

def __get_response_json_dict(data, err_code=0, message="Success"):
    ret = {
        'err_code': err_code,
        'message': message,
        'data': data
    }
    return ret

def get_sum(request):
    received_data = json.loads(request.body.decode('utf-8'))
    var1 = received_data['var1']
    var2 = received_data['var2']

    sum = var1 + var2

    response_data = {"sum": sum}

    return JsonResponse(
        __get_response_json_dict(data=response_data)
    )

其中:

  1. received_data = json.loads(request.body.decode('utf-8'))中,我们首先通过request.body.decode('utf-8'),拿到request body的JSON字符串,并通过json.loads()将JSON字符串转化为dict对象。
  2. 我们添加了一个辅助函数__get_response_json_dict()来获取我们前面说的response的统一格式。
  3. JsonResponse()接收一个dict对象,将其转化为JSON字符串,放入response的body里。

编辑task_platform/urls.py,将我们刚刚实现的API处理函数加入到路由表中。

# task_platform/urls.py

from django.contrib import admin
from django.urls import path
from task_platform import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/sum/', views.get_sum),
]

实验

运行Django server:

$ python3 manage.py runserver
... ...
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

用Postman模拟请求,可以看到:

Postman模拟请求

总结

经过练习,我们已经了解如何实现一个简单的REST API了!我们之后的API都是建立在这个通讯模型之上的(当然还有一些使用GET方法的API)。在后面,我们将看看,如何通过这种模式,实现一个用户认证系统的REST API。

你可能感兴趣的:((二)Django REST实践:最简单的REST API实现)