一、Resful接口介绍
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
RESTFUL特点包括:
每一个URI代表1种资源;
客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
通过操作资源的表现形式来操作资源;
资源的表现形式是XML或者HTML;
客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
二、相关案例
1.Django中Resful路由代码
from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ # 获取所有和保存图书 url(r'^books/$',views.BooksView.as_view() ), url(r'^books/(?P<pk>\d+)/$',views.BookView.as_view() ), ]
2.Django中Resful业务代码
import os from django.shortcuts import render, reverse from django.views import View from book.models import BookInfo, HeroInfo from django.conf import settings from django.http import JsonResponse, HttpResponse from django.template import loader import json class BooksView(View): """ 获取所有图书和保存图书 """ def get(self, request): """ 获取所有图书 :param request: :return: """ # 1、查询图书表获取所有图书对象 books = BookInfo.objects.all() # 2、提取所有对象的字段内容 book_list = [] for book in books: data = { 'id': book.id, 'btitle': book.btitle, 'bread': book.bread, 'bpub_date': book.bpub_date } book_list.append(data) # 3、返回所有对象字段内容 return JsonResponse({'book_list': book_list}) def post(self, request): """ 保存图书 :param request: :return: """ # 1、获取保存的图书数据 data = request.body.decode() data_dict = json.loads(data) # 2、验证图书数据字段 btitle = data_dict.get('btitle') bpub_date = data_dict.get('bpub_date') if btitle is None or bpub_date is None: return JsonResponse({'error': '缺少必要数据'}) # 3、保存图书 book = BookInfo.objects.create(btitle=btitle, bpub_date=bpub_date) # 4、返回保存后的图书数据 return JsonResponse( { 'id': book.id, 'btitle': book.btitle, 'bread': book.bread, 'bpub_date': book.bpub_date } ) class BookView(View): """ 获取单一图书数据 更新图书 删除图书 """ def get(self, request, pk): """ 获取单一图书数据 :param request: :param pk: :return: """ # 1、根据pk值查询图书对象 try: book = BookInfo.objects.get(id=pk) except: return JsonResponse({'error': '错误的id值'}) # 2、返回图书数据 return JsonResponse( { 'id': book.id, 'btitle': book.btitle, 'bread': book.bread, 'bpub_date': book.bpub_date } ) def put(self, request, pk): """ 更新图书 :param request: :param pk: :return: """ # 1、获取保存的图书数据 data = request.body.decode() data_dict = json.loads(data) # 2、验证图书数据字段 btitle = data_dict.get('btitle') bpub_date = data_dict.get('bpub_date') if btitle is None or bpub_date is None: return JsonResponse({'error': '缺少必要数据'}) # 3、更新图书 # try: # book = BookInfo.objects.get(id=pk) # except: # return JsonResponse({'error': '错误的id值'}) # # book.btitle=btitle # book.bpub_date=bpub_date # book.save() # {'name':'python'} name=python {'btitle':'书名'} num = BookInfo.objects.filter(id=pk).update(**data_dict) # 4、返回保存后的图书数据 book = BookInfo.objects.get(id=pk) return JsonResponse( { 'id': book.id, 'btitle': book.btitle, 'bread': book.bread, 'bpub_date': book.bpub_date } ) def delete(self, request, pk): """ 删除图书 :param request: :param pk: :return: """ # 1、查询删除的图书对象 try: book = BookInfo.objects.get(id=pk) except: return JsonResponse({'error': '错误的id值'}) # 2、逻辑 book.is_delete = True book.save() # 物理删除 # book.delete() # 3、返回结果 return JsonResponse({})
总结
Resful接口增删改查接口说明:
返回状态码说明: