设计思想
- 遵循CRUD原则,告诉我们对于资源只需要四种行为:创建、获取、更新和删除就可以完成相关的操作和处理。
- 通过统一资源标识符来识别和定位资源,并且针对这些资源而执行的操作是通过HTTP规范定义的。其核心操作只有GET、PUT、POST、DELETE。
- REST主要用于定义接口名,接口名一般用名词写,不用动词,如果表达“获取”或者“删除”及更i性能的操作,用请求类型(GET、PUT、POST、DELETE)来区分。
HTTP方法幂等性与安全性
HTTP方法 | 资源操作 | 幂等 | 安全 |
---|---|---|---|
GET | SELECT | 是 | 安全 |
POST | INSERT | 否 | 否 |
PUT | UPDATE | 是 | 否 |
DELETE | DELETE | 是 | 否 |
幂等:对同一个Rest接口多次请求,得到的资源状态是相同的。
安全:对该Rest接口请求,不会使服务器资源状态发生改变。
Rest优势
- 由于Rest强制所有的操作都必须是无状态的,这就没有上下文的约束,入宫做分布式,集群都不需要考虑上下文和会话保持的问题,极大的提高系统的可伸缩性。
- 前后端分离,前端拿到数据只负责展示和渲染,不对数据做任何处理。后端处理数据并以JSON格式传输出去,定义这样一套统一的接口,在web、ios、android三端都可以用相同的接口。
Django接口开发
Django简介
Django是一个开放源代码的web应用框架,由python写成,采用MVC的框架模式,最初被开发用来管理劳伦斯出版集团旗下的一些新闻内容为主的网站。Python的web开发框架除了Django,还有Flask和Tornado等。
安装
- 安装 输入命令 pip install django==2.2(这里推荐使用2.2的版本,因为3.0+的会导致其他模块无法兼容使用)
- 查询是否安装成功 django-admin
Django Rest Framework
简介
一套基于Django的REST风格的框架。
特点
- 功能强大,灵活,可以帮助快速开发Web API
- 支持认证策略,包括Oauth1和OAuth2
- 支持ORM对象关系映射和非ORM数据源的序列化
- 丰富的文档以及良好的社区支持
安装
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
创建API
创建项目
- 在指定盘符创建api应用 django-admin startproject new_restful
- 进入项目new_restful创建api应用,创建完成后在项目文件夹下多了一个api文件夹 python manage.py startapp api
- 打开settings.py 在项目下添加api和rest_framework
- 默认的权限策略设置全局范围,通过DEFAULT_PERMISSION_CLASSESS设置,在文件末尾添加第四步内容
# 第三步
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api'
]
# 第四步
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
数据库迁移
通过命令进行数据库迁移,项目下执行 python manage.py migrate
创建超级管理员
使用createsuperuser命令创建管理员账户,密码至少8位数字字母组合 python manage.py createsuperuser
启动Server
- 启动命令 python manage.py runserver
- 确定是否成功 输入地址:127.0.0.1:8000,显示successfully
数据序列化
Serializers用于定义API的表现形式,如返回哪些字段、返回怎样的格式等。这里序列化Django自带的User和Group。创建数据序列化,在api应用下创建serializers.py文件。
序列化代码如下:
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'is_staff']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
创建视图
试图用于如何向用户展示数据,展示那些数据。比如用户查询User信息或查询Group信息,那么程序内部要定义好怎么去查询,在Django Rest Framework中,ViewSets用于定义视图的展现形式,例如返回那些内容,需要做那些权限处理。打开api一个用下的views.py文件,编写如下代码:
from django.shortcuts import render
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from api.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
在URL中会定义相应的规则到ViewSets,ViewSets则通过serializer_class找到对应的Serializers。
这里将User和Group的所有对象赋予queryset,并返回这些值,在UserSerializer和GroupSerializer中定义要返回的字段。
URL路由配置
打开urls.py文件,添加api的路由配置
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from rest_framework import routers
from api import views
router=routers.DefaultRouter()
router.register(r'users',views.UserViewSet)
router.register(r'groups',views.GroupViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(router.urls)),
path('api-auth',include('rest_framework.urls',namespace='rest_framework'))
]
api编辑
直接通过127.0.0.1:8000的登录面板,直接在Users与Groups进行编辑与关联
Swagger接口文档生成
- 接口开发完成,接下来需要编写接口文档。传统的接口文档编写都是使用Word或者其他一些接口文档管理平台,这种形式接口文档维护更新比较麻烦,每次接口有变动就要手动修改文档。
- 因此,针对这种情况,推荐使用Swagger来管理接口文档。
Swagger简介
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新,每当接口有变动时,对应的接口文档也会自动更新。
Swagger能成为最受欢迎的REST APIs文档生成工具之一,有如下几个原因:
- 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API
- 可以生成客户端SDK代码用于各种不同的平台上的体现
- 可以在许多不同的平台上从代码注释中自动生成
- 有一个强大的社区,里面有许多强悍的贡献者