Django REST Framework API和RESTful接口规范

2023-05-16

API

API是指某个应用程序封装好的一些函数,是提供给其他应用程序或开发人员使用的。通过API,可以方便的使用的本应用程序的功能,而无需了解本应用程序的内部源码。

Web API是API中的一类,它的功能与广义上的API是一样的,只是它提供给外界的是一些url规则而非函数,包括下面4个部分:

url:url链接;
请求方式:get、post、patch、delete等;
请求参数:json或xml格式的key-value类型数据;
响应结果:json或xml格式的key-value类型数据。


RESTful接口规范

REST是REpresentational State Transfer(表述性状态转移)的首字母缩写。它是分布式超媒体系统的架构风格,最初由Roy Fielding在2000年的论文中提出。

1.什么是RESTful:


REST-ful,其中ful代表形容词,如helpful、powerful。这类形容词意为"full of,having the quality of"。多加在名词之后表示“充满…的、易于…、可…的、富有…的、具有…的”的意思,是最常用的形容词后缀,反义词后缀是-less。RESTful 就代表满足REST原则的

参考自:RESTful API

2. 什么是RESTful规范


REST指的是一组架构约束条件和原则,通常用于Web服务的开发。它没有提出具体的实现,只是提出了一些指导规范,供我们开发时参考。我们可以按照它的规范来,也可以忽视(不建议)。

如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

3.RESTful API 设计指南


安全保障
为了安全起见,应该使用https协议。

4.表识API


用api关键字标识api url,与普通url加以区别。如:

www.xyz.com/api/xxx/,api.xyz.com/xxx/

5.版本控制


在url中添加版本版本,或者将版本信息放在请求头中,请求同一资源的不同版本。如:

api.xyz.com/v1/xxx,Accept: application/vnd.xyz+json;version=1.0。

6.路径


数据即是资源,应当使用名词(可用复数形式)。如:www.xyz.com/book/。

HTTP动词,即请求方法(method)
对资源的操作由请求方式决定!

HTTP请求方法资源操作 幂等安全
GET 从服务器取出资源(一项或多项)
POST在服务器新建一个资源
PUT在服务器更新资源(客户端提供改变后的完整资源)
PATCH与PUT类似,用于更新资源,区别在于PATCH代表部分更新
OPTIONS  检测服务器所支持的请求方法,响应头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
ELETEDELETE(删除)是  否


幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。

安全性:对该REST接口访问,不会使服务端资源的状态发生改变。

7.过滤


通过在url上传递参数的形式提交过滤条件。如:

https://api.example.com/v1/zoos?limit=10:指定返回记录的数量

https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置

https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数

https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序

https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件

HTTP状态码
1xx(信息):通信传输协议级信息
1XX系列响应代码仅在与HTTP服务器沟通时使用,平常极少使用。

2xx(成功):表示客户端的请求已成功接受
200(OK):表示REST API成功执行了客户端请求的任何操作;

201( Created):用户新建资源成功。

202(Accpted):已经接受请求并加入了处理队列,但处理尚未完成。

204(No Content):服务器成功处理,但没有内容可返回。常用于PUT、POST或者DELETE请求的响应。

204响应绝不能包含消息体,因此总是在头字段之后的第一个空行终止。

3xx(重定向 ):表示客户端必须执行一些其他操作才能完成其请求
301(Moved Permanently):请求的URL已永久移走,并设计了新的URL,客户端应该使用新的URL。

REST API应在响应的Location头中指定新的URL,并且将旧的URL请求都定向到新的URL。

302(Found):与301类似,但资源只是临时被移动,客户端应继续使用原有URL。

302 是执行URL重定向的常用方式。

304(Not Modified):如果客户端在发送GET请求时附上if-Modified-Since报头,并且从报头指定版本开始从未修改过该资源,则说明客户端的缓存资源是最新的, 要求客户端使用缓存以节省资源。

此状态代码类似于204,响应正文必须为空。

4xx(客户端错误):此类错误状态代码指向客户端
400(Bad Request):这是一个通用的客户端错误状态,表示客户端请求的语法错误,服务器无法理解。

401(Unauthorized):客户端试图对一个受保护的资源进行操作,却没有提供正确的认证证书(令牌、用户名、密码错误)。

响应必须包含WWW-Authenticate头字段,其中包含适服务器将接受哪种认证。

403(Forbidden):与401错误相对,表明客户端的请求是正确的,但用户没有资源的必要权限。

该响应代码常用于一个资源只允许在特定时间段内访问,或者允许特定IP地址的用户访问的情况。

404(Not Found):服务器无法根据客户端的请求找到资源(网页)。

405(Method Not Allowd):客户端尝试使用资源不允许的HTTP方法。比如,一个资源只支持GET方法,但是客户端使用PUT方法访问。

405响应必须包含Allow标头,该标头列出资源支持的HTTP方法。

406(Not Acceptable):用户请求的格式不可得。比如用户请求JSON格式,但是只有XML格式。

5xx(服务器错误):服务器负责这些错误状态代码
500(Internal Server Error):这是一个通用的服务器错误响应。对于大多数web框架,如果在执行请求处理代码时遇到了异常,它们就发送此响应代码。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django REST Framework API和RESTful接口规范 的相关文章

随机推荐

  • IIC通信协议

    IIC通信协议 一 什么是IIC通信协议 xff1f 二 IIC协议时序分析1 空闲状态2 起始信号和停止信号3 数据传输 xff08 1 xff09 写操作 字节写 xff08 2 xff09 写操作 页写 xff08 3 xff09 读
  • 斜杠与反斜杠的区别和用法

    路径中使用斜杠 和反斜杠 的区别到底是什么 Unix使用斜杆 作为路径分隔符 xff0c 而web应用最新使用在Unix系统上面 xff0c 所以目前所有的网络地址都采用 斜杆 作为分隔符 Windows由于使用 斜杆 作为DOS命令提示符
  • 第七章 面向对象分析---建立动态模型

    建立动态模型 开发交互式系统 xff0c 动态模型非常重要 步骤 xff1a 编写典型交互行为脚本 xff08 依据用例描述 xff09 从脚本中提取事件及相关对象 xff0c 用顺序图表达确定对象状态及状态间转换关系 xff0c 用状态图
  • 几个经典问题:1)项目利益分配;2)如何提涨薪:3)老油条 的处理;4)我提离职后老板态度好了……

    问题1 xff1a 做项目的时候 xff0c 一般利益分配的比例是怎么样的 xff1f 回答 xff1a 以前在群中对于类似问题已经回答多次了 xff0c 小结一下 xff1a 1 xff09 一荣俱荣一损俱损的原则 xff1b 2 xff
  • Autoware 1.12学习整理--06--open_planner路径规划与避障

    前言 本文将在gazebo仿真环境中使用open planner完成局部路径规划与避障 xff0c open planner需要输入矢量地图 vector map xff0c 可以使用unity map toolbox绘制矢量地图 xff0
  • python3.7+cmake+dlib+face_recognition图文安装教程

    问题描述 xff1a ModuleNotFoundError No module named 39 face recognition 在安装dlib时踩坑无数 xff0c 一直安装不成功 因为dlib库都是关于python3 6的 xff0
  • 解决python opencv imshow中文乱码问题,亲测有效

    opencv imshow font 默认是只能显示英文的 xff0c 有中文就会出现乱码现象 xff0c 使用PIL的方式绘制文字 xff0c 绘制好之后再以opencv的图片类型返回去 xff0c 在使用imshow就可也解决乱码问题了
  • 在虚拟机中安装Ubuntu 18.04图文教程

    安装前的准备 xff1a 操作系统 xff1a Win10 X64 虚拟机版本 xff1a VMware Workstation 16 Pro ubuntu版本 xff1a ubuntu 18 04 desktop amd64 1 启动VM
  • docker redis连接被拒绝的解决办法

    修改redis的配置 xff1a 修改配置后建议重新启动redis service redis server restart bind 127 0 0 1 xff1a 允许访问机器的IP xff0c 默认只有本机才能访问 xff0c 你可以
  • conda:未找到命令

    下载 wget c https repo continuum io miniconda Miniconda3 latest Linux x86 64 sh wget c https repo anaconda com archive Ana
  • Numpy和Pandas基础用法

    Numpy基础 numpy的array创建 numpy属性 numpy的基础运算 numpy的索引 numpy的array合并 numpy的array分割 numpy的拷贝与深拷贝 Pandas基础 DataFrame基本介绍 pandas
  • Python--dlib图文安装教程

    1 指定版本 xff0c 适用于python3 6版本的 pip install dlib 61 61 19 6 1 2 下载后离线安装 Python3 6版本 下载文件 xff1a dlib 19 6 0 cp36 cp36m win a
  • Django实现头像上传及修改放大查看功能的实现过程

    配置 1 在setting里面配置存放头像图片的文件夹及路径 静态路径 STATIC URL 61 39 static 39 STATICFILES DIRS 61 os path join BASE DIR 39 static 39 用户
  • Linux Ubuntu18.04安装uwsgi时出现 ERROR: Command errored out with exit status 1:

    Ubuntu18 04安装uwsgi时出现的错误 py3 8 5 root 64 ecs 7dec usr local web django oldMan pip3 install uwsgi i https pypi tuna tsing
  • 怎样应对“需求不确定型项目”?

    问题描述 xff1a 需求不确定 xff0c 老板直接和客户谈需求 xff0c 项目经理不能或不方便参与 xff0c 打下手 xff0c 这类项目怎样办 xff1f 要深层次了解客户的想法 xff0c 各种利益 xff0c 地盘等 xff0
  • 冒泡排序算法

    34 34 34 冒泡排序算法 34 34 34 bubble sort 61 list range 0 10 2 print bubble sort n 61 0 for i in range len bubble sort for j
  • DjangoFBV和CBV的理解

    1 FBV xff08 基于函数的视图 xff09 FBV xff08 function based views xff09 xff0c 即基于函数的视图 FBV 简单易懂 xff0c 但是难以复用 它们不能像 CBV 那样能从父类中继承
  • python面向对象的三大特征:封装、继承、多态

    python 是面向对象的语言 xff0c 也支持面向对象编程的三大特性 1 封装 隐藏对象的属性和实现细节 xff0c 只对外提供必要的方法 相当于将 细节封装起来 xff0c 只对外暴露 相关调用方法 xff0c 通过前面的 私有属性
  • Django的中间件

    中间件可以定义五个方法 分别是 xff1a xff08 主要的是process request和process response xff09 process request self request process view self re
  • Django REST Framework API和RESTful接口规范

    API API是指某个应用程序封装好的一些函数 xff0c 是提供给其他应用程序或开发人员使用的 通过API xff0c 可以方便的使用的本应用程序的功能 xff0c 而无需了解本应用程序的内部源码 Web API是API中的一类 xff0