当前位置: 首页 > news >正文

Restful API接口规范(以Django为例)

Restful API接口规范(以Django为例)

Restful API的接口架构风格中制定了一些规范,极大的简化了前后端对接的时间,以及增加了开发效率

  • 安全性保证–使用https
  • 路径中带 api标识
  • 路径中带版本号
  • 数据即资源,通常使用名词操作
  • 请求方式决定操作资源的方式
    • get 获取数据
    • post 增加数据
    • put 修改数据
    • delete 删除数据
  • 响应状态码
    • http响应状态码:1 2 3 4 5
    • 自己定制的状态码
  • 响应中带提示
    • msg
  • 请求地址中带查询参数–》只针对于查询所有
  • 响应中带链接地址
  • 操作符合如下规范
    • 查所有: 数组 列表
    • 查单条: 对象
    • 新增: 返回新增的对象
    • 删除:空文档
    • 修改:返回修改后的对象

Restful API与传统设计的区别

在之前的url设计中,我们通常会这么写

  • http://localhost:8000/get(查询用户)

  • http://localhost:8000/add(新增用户)

  • http://localhost:8000/update(更新用户)

  • http://localhost:8000/detele(删除用户)

即所有交互全部在后端执行,request请求的方法全部为get或post方法,

因此需要在后端进行各种校验和if判断非常繁琐

根据Restful API接口规范修改

  • http://localhost:8000/api/(查询用户)

    • request请求方法:GET
  • http://localhost:8000/api/(新增用户)

    • request请求方法:POST
  • http://localhost:8000/api/id/(更新用户)

    • request请求方法:PUT
  • http://localhost:8000/api/id/(删除用户)

    • request请求方法:DELETE

根据请求方式在后端执行不同的代码块,后端无需再对数据类型再次校验

示例

以Django框架为示例:

根据不同路由执行方法

# urls.py
urlpatterns = [path('admin/', admin.site.urls),path('find_all/', app.views.find_all),path('find/', app.views.find),path('insert/', app.views.insert),path('delete/', app.views.delete),path('change/', app.views.change),
]
# views.py
def find_all(request):if request.GET.get('data') == 'find_all':response = {'code': '200', 'msg': "查询成功", 'results': results}response = json.dumps(response)return JsonResponse(response, safe=False)return HttpResponse('查询所有')def find(request):if request.GET.get('data') == 'find':response = {'code': '200', 'msg': "查询成功"}response = json.dumps(response)return JsonResponse(response, safe=False)return HttpResponse('查询单个')def insert(request):if request.method == 'POST':response = {'code': '200', 'msg': "添加成功"}return JsonResponse(response, safe=False)return HttpResponse('新增一个')def delete(request):if request.method == 'POST':response = {'code': '200', 'msg': "删除成功"}return JsonResponse(response, safe=False)return HttpResponse('删除一个')def change(request):if request.method == 'POST':response = {'code': '200', 'msg': "修改成功"}return JsonResponse(response, safe=False)return HttpResponse('修改一个')

根据Restful API规范修改后的示例

# urls.py
urlpatterns = [path('admin/', admin.site.urls),path('app/', app.views.task.as_view()),path('app/<str:u_id>/', app.views.task_detail.as_view()),
]
# views.py
class task(View):# 获取所有def get(self, request):response = {'code': '200', 'msg': "查询成功"}return JsonResponse(response, safe=False)# 新增def post(self,request):response = {'code': '200', 'msg': "添加成功"}return JsonResponse(response, safe=False)class task_detail(View):# 根据id获取def get(self, request, u_id):response = {'code': '200', 'msg': "获取成功"}return JsonResponse(response, safe=False)# 根据id删除def delete(self, request, u_id):response = {'code': '200', 'msg': "删除成功"}return JsonResponse(response, safe=False)# 根据id修改def put(self, request, u_id):response = {'code': '200', 'msg': "修改成功"}return JsonResponse(response, safe=False)
http://www.lryc.cn/news/339081.html

相关文章:

  • AI助力,程序员压力倍增?
  • LoRA微调
  • 45.基于SpringBoot + Vue实现的前后端分离-驾校预约学习系统(项目 + 论文)
  • 系统思考—时间滞延
  • SSM项目转Springboot项目
  • VUE3.0对比VUE2.0
  • 车内AR互动娱乐解决方案,打造沉浸式智能座舱体验
  • OR36 链表的回文结构
  • 【译】微调与人工引导: 语言模型调整中的 SFT 和 RLHF
  • kylin java.io.IOException: error=13, Permission denied
  • 前端面试01总结
  • 算法--目录
  • ArcGIS Pro 3D建模简明教程
  • 24届数字IC设计/验证秋招总结贴——先看这个
  • 带洞平面三角分割结果的逆向算法
  • MGRE-OSPF接口网络类型实验
  • ChatGPT科研利器详解:写作论文轻松如玩游戏
  • vue3从精通到入门23:定义全局变量
  • 反爬虫之代理IP封禁-协采云IP池
  • ELK-Kibana 部署
  • Backtrader 量化回测实践(7)——在jupyter中执行bt的samples
  • npm vs. pnpm vs. Yarn: 三者之间的区别与比较
  • Learning Feature Sparse Principal Subspace 论文阅读
  • Hibernate入门经典与注解式开发大全
  • 蓝桥杯之注意事项
  • ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等
  • c++ - 类的默认成员函数
  • Java哈希查找(含面试大厂题和源码)
  • c++中常用库函数
  • Scrapy框架 进阶