首页 > 其他分享 >API接口与drf规范

API接口与drf规范

时间:2022-09-23 21:01:19浏览次数:51  
标签:请求 get self request 接口 API import drf

前后端开发模式

1.前后端混合
前端写好静态html页面,后端使用模板语法进行渲染,然后在在对接,遇到问题返回给前端进行修改,这要求后端人员会一些HTML、JS等前端语言,这种模式让前后端开发的进度互相响应,对后端人员的要求也更高

2.前后端分离
-随着外部开发(pc端、移动端),开始流行前后端分离开发
-后端只需要负责接口(API接口),使用postman接口测试工具测试
-前端人员只需要负责写前端,使用mock数据模拟测试
-出问题后,前端问题改前端,后端问题改后端,这样开发效率必然有所提升

API接口

1.API全称为应用程序编程接口,规定了前后端信息交互规则的url连接,也就是所有的客户端和消费端都通过统一的网关接入微服务

2.API接口的样子
2.1url:看起来像数据的url链接
https://api.map.baidu.com/place/v2/search

2.2请求方式:
get(获取数据)、post(新增数据)、put(修改数据)、patch(修改数据)、delete(删除数据)
eg:使用上方接口就是get方式请求

2.3请求参数:参数可以是json或xml格式的key-value类型数据
?ak=6E823f587c95f0148c19993539b99295&region=上海&query=肯德基&output=json
eg:使用上方接口就是get方式请求,这个接口需要在后面携带上面的参数

2.4响应结果:可能json或xml格式的数据

接口测试工具

1.API接口写好后,后端人员要自行测试,不可能在浏览器里测试,可以使用postman软件来做接口测试,postman软件时通过模拟http请求来测试
'接口测试软件有很多,如:postwoman'

2.下载官网:https://www.postman.com/downloads/

restful规范

-REST全称Representational State Transfer,是描述了框架样式的网络系统,它首次出现在2000年Roy Fielding的博士论文中,REST并没有明确的标准,而更像是一种设计风格

'REST规范有10点,不过每个公司都有自己的风格规范'
1.数据的安全保障
https比http更安全,所以为了保证数据的安全,url链接尽量使用HTTPS协议来进行传输
-HTTPS:http+ssl/tsl

2.接口中带api关键词
带api关键词代表着是链接接口的的请求

3.多数据版本共存
一个接口可以有多个版本,url链接中标识版本
如应用的版本更新后,升级了新的接口,但有些用户并没有更新,所以我们在更新接口是会重新写一个接口,这样没更新的用户就可以通过版本标识使用旧接口

4.数据即是资源,均使用名词(可使用负数)
接口尽量使用名词

5.资源操作由请求方式决定
请求地址都一样,通过请求方式决定对资源进行操作
get>>>获取数据
post>>>新增数据
put、patch>>>修改数据
delete>>>删除数据

6.url地址中带过滤参数
-获取所有动物>>>127.0.0.1/api/v1/animals
-获取所有哺乳类动物>>>127.0.0.1/api/v1/animals?type=哺乳类

7.响应状态码
http状态码:
-1xx:表示请求正在处理,一般是看不到的
-2xx:表示请求成功
	200:成功处理请求
	201:请求成功
-3xx:重定向
	301:永久重定向
	302:临时重定向
-4xx:客户端错误
	403:拒绝请求
	404:不存在
-5xx:服务端错误
-有些公司有规范,在响应体中写状态码
{'code': 100}

8.返回错误信息
响应体中带成功或错误信息
{'code': 100, 'msg': '成功'}

9.返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
-restful规范
GET:/collection:返回资源对象的列表(数组)>>>[{},{}]
GET:/collection/resource:返回单个资源对象>>>{}
POST:/collection:返回新增的资源对象>>>{}
PUT:/collection/resource:返回修改后的资源对象>>>{}
PATCH:/collection/resource:返回修改后的资源对象>>>{}
DELETE:/collection/resource:返回一个空文档
-不过也有人
获取所有:{'code': 100, 'msg': '获取成功', date: [{}, {}]}
获取单条:{'code': 100, 'msg': '获取成功', date: [{}]}
新增数据:{'code': 100, 'msg': '新增成功', date: [{}]}
修改数据:{'code': 100, 'msg': '修改成功', date: [{}]}
删除数据:{'code': 100, 'msg': '删除成功'}

10.响应中带链接

序列化和反序列化

1.在api接口开发中,最常见的过程就是序列化,序列化就是把数据转换成其他格式
2.序列化:把我们识别的数据转换为指定的格式
3.反序列化:把别人提供的数据转换成我们需要的格式

djangorestframework快速使用

1.使用django这个web框架,开发前后端分离项目,只需要写接口
原生django:使用JsonResponse返回
djangorestframework:可以方便我们快速写出符合restful规范的接口

2.djangorestframework写接口总共5个及这5个的变形
获取所有>>>get
获取单个>>>get
新增一条>>>post
修改一条>>>put/patch
删除一条>>>delete

3.下面建立Book表尝试drf操作

models.py

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.CharField(max_length=32)
    publish = models.CharField(max_length=32)

serializer.py

from rest_framework import serializers
from .models import Book


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

views.py

from .models import Book
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer


class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

urls.py

from django.contrib import admin
from django.urls import path
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView)
urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += router.urls

cbv源码分析

1.cbv写好后路由配置
第一个是匹配的路径,第二个参数是视图函数的内存地址(视图函数执行as_view()类方法,把他执行后的结果放在第二个参数上,所有执行完的结果应该是个函数内存地址)
path('set/', views.TesView.as_view())

2.去找as_view,在TesView中没有找到,在去父类View中找
@classonlymethod  # 将方法装饰成类
def as_view(cls, **initkwargs):
    def view(request, *args, **kwargs):
        return self.dispatch(request, *args, **kwargs)
    return view  # 返回函数的内存地址

3.当请求来时,路由匹配成功会执行views.TesView()(request)>>>view(request)
本质是执行了self.dispatch(request, *args, **kwargs),去View中找dispatch
def dispatch(self, request, *args, **kwargs):
    # 请求方式转成小写,判断是否在http_method_names中
    if request.method.lower() in self.http_method_names:
        # 去self对象找request.method.lower(),找打则返回这个方法,没找到则返回self.http_method_not_allowed
        handler = getattr(
            # handler是TesView类的get方法
            self, request.method.lower(), 
            # self是TesView的对象
            self.http_method_not_allowed
        )
        else:
            handler = self.http_method_not_allowed
        # 执行get(request)
        return handler(request, *args, **kwargs)
'''
也就是说cbv本质上,如果是get请求它就会执行get,如果你是post请求它就会执行post
'''

标签:请求,get,self,request,接口,API,import,drf
From: https://www.cnblogs.com/riuqi/p/16724211.html

相关文章

  • 接口基础
    1、什么是API接口?简单来说,接口就是系统或模块之间相互连接的部分,就称为接口。在软件测试中,我们可以理解为url就是一个接口,如:https://www.baidu.com/由客户端(浏览器)发......
  • 前后端开发模式、API接口、接口测试工具postman、restful规范、序列化和反序列化、dja
    目录前后端开发模式一、两种模式1.传统开发模式:前后端混合开发1.1.缺点:2.前后端分离开发模式2.1.特点3.补充老刘的相关博客:二、API接口1.作用2.说明三、接口测试工具postm......
  • drf(djangorestframewor)-01
    目录前后端开发模式API接口接口测试工具postmanrestful规范序列化和反序列化djangorestframework快速使用cbv源码分析前后端开发模式1.前后端结合模式----全栈后端人......
  • 今日内容 API接口和drf的使用
    前后端开发模式详细见博客链接:https://www.cnblogs.com/liuqingzheng/p/10900502.html补充:前后端混合开发使用模板语法渲染模板后端人员要通过前端写好的html页面......
  • 集合.Set子接口
    Set子接口特点:无序、无下标、元素不可重复方法:全部继承自Collection中的方法Set实现类HashSet【重点】:基于HashCode实现元素不重复当存入元素的哈希码相同时,会调......
  • 【2022-09-23】DRF入门到入土(一)
    drf入门规范一、web应用模式web应用模式分为两种,一种是前后端不分离,一种是前后端分离前后端不分离前后端分离二、API接口为了在团队内部形成共识、防止......
  • 前后端分离 drf之一
    API接口前后端分离的开发模式:客户端和服务端采用restfulAPI的交互方式进行交互前后端代码库分离,前端代码可以进行mock测试能够独立开发和测试后端则用postman接口测......
  • drf学习笔记
    今日内容概要前后端开发模式API接口接口测试工具postmanrestful规范序列化和反序列化djangorestframework快速使用cbv源码分析今日内容详细前后端开发模式前后......
  • 【C#】接口的基本概念
    目录基本什么是接口接口与抽象类的区别抽象类接口实例设计接口基本什么是接口C#接口(interface)是:用来定义一种程序的协定实现接口的类或者结构要与接口的定义严格一致。......
  • Feign调用第三方http接口 (摘抄)
    我们平常在开发的时候,经常会碰到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿。Feign是声明式服务调......