Restful api
符合REST架构设计的API叫做restful api。
那么什么是REST呢?REST是所有Web应用都应该遵守的架构设计指导原则。
Representational State Transfer,翻译是”表现层状态转化”。
面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。(7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)
其实说到底,restful api 就是一种统一规范的api设计风格
在django中可以使用djangorestframework 来快速开发规范的restful api,当然也可以自己按照restful的规范来自行开发。
范例
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
Django Rest framework
- 建立 Models
- 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示)
- ViewSet 是一个 views 的集合,根据客户端的请求(GET、POST等),返回 Serialiers 处理的数据权限 Premissions 也在这一步做处理
- ViewSet 可在 Routers 进行注册,注册后会显示在 Api Root 页上
- 在 urls 里注册 ViewSet 生成的 view,指定监听的 url
# 以rmdb 的idc为例,来写一个简单的restful api
# 这是models.py
class Idc(models.Model):
ch_name = models.CharField("机房中文名称", max_length=32, unique=True, null=True)
en_name = models.CharField("机房英文名称", max_length=32, unique=True, null=True)
address = models.CharField("机房地址", max_length=100, null=True, blank=True)
ip_range = models.CharField("IP范围", max_length=64, null=True)
bandwidth = models.CharField("接入带宽", max_length=32, null=True)
add_person = models.CharField("添加人", max_length=50, null=True)
add_time = models.CharField("添加时间", max_length=50, null=True)
description = models.TextField("备注", max_length=100, null=True, blank=True)
def __str__(self):
return self.en_name
class Meta:
verbose_name = '机房'
verbose_name_plural = '机房'
########################################################
# 然后写序列化文件
# serializers.py
from rmdb.models import *
from rest_framework import serializers
class IdcSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Idc
fields = '__all__'
# fields = ('id','ch_name','en_name','address','bandwidth','description')
#########################################################
# 再写view文件
# view.py
from rmdb.models import *
from rest_framework import viewsets
from rest_framework import permissions
from restapi.serializers import IdcSerializer
class IdcViewSet(viewsets.ModelViewSet):
queryset = Idc.objects.all().order_by('-add_time')
serializer_class = IdcSerializer
permission_classes = (permissions.IsAuthenticated,)
#########################################################
# 最后写url文件
# urls.py
from django.conf.urls import include, url
from rest_framework import routers
from restapi.views import IdcViewSet
router = routers.DefaultRouter()
router.register(r'idc', IdcViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
]
## 然后就可以用浏览器或者命令行访问测试了,一个简单的restful api就完成了。