restful 规范(建议)
需求:开发cmdb,对用户进行管理。
做前后端分离,后端写api(URL),对用户表进行增删改查,应该写四个URL(还要给文档(返回值,返回,请求成功,干嘛,失败,干嘛)),然后分别写视图函数。
http://www.cmdb.com/add_user/
{
code:666,
data:[数据]
}
http://www.cmdb.com/update_user/
http://www.cmdb.com/delete_user/
http://www.cmdb.com/get_user/
把这四个URL给前端,Vue里面发axios用的是jquery
$.ajax({
})
订单管理:
第一种:接口开发是用这种方式来实现
路由:
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^get_order/', views.get_order),
url(r'^update_order/', views.post_order),
url(r'^add_order/', views.add_order),
url(r'^delete_order/', views.add_order),
]
视图:
from django.shortcuts import render,HttpResponse # Create your views here. def update_order(request):
return HttpResponse('更新') def add_order(request):
return HttpResponse('添加') def get_order(request):
return HttpResponse('获取') def delete_order(request):
return HttpResponse('删除')
这个方式有个小问题就是前端记着的URL会越来越多越来越多,后端给前端提供的URL也会越来越多。对十张表进行增删改查需要四十个URL。
所以渐渐地就出现了个潜规则就修订了一个规范,如果按照这个规范做的时候会简洁一些。
就出现了restful规范,是对上面的一些建议。
其中第一个建议就是:对于一条数据,就写一个URL就行了。到后台怎么去区分增删改查呢?根据method的不同来区分。
就写一个URL
路由:
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^order/', views.add_order),
]
如果执行这个order的时候,这个URL隐含了增删改查。在后台做个区分,前端如果发GET请求就查,就获取一个订单。发POST就传建一个订单。发DEETE请求就删除一个订单。发PUT请求就更新一个订单。
视图:
from django.shortcuts import render,HttpResponse def order(request):
if request.method == 'GET':
return HttpResponse('获取') elif request.method == 'POST':
return HttpResponse('添加') elif request.method == 'DELETE':
return HttpResponse('删除') elif request.method == 'PUT':
return HttpResponse('更新')
也可以基于CBV来写,基于cbv会更好,因为基于cbv,method判断就不用写了。只要写上方法就可以了。
路由:
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^order/', views.OrderView.as_view()),
]
视图:
from django.shortcuts import render,HttpResponse # Create your views here. from django.views import View from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator @method_decorator(csrf_exempt,name='dispatch')
class OrderView(View): def get(self,request,*args,**kwargs):
return HttpResponse('获取') def post(self,request,*args,**kwargs):
return HttpResponse('添加') def delete(self,request,*args,**kwargs):
return HttpResponse('删除') def put(self,request,*args,**kwargs):
return HttpResponse('更新')
restful 规范
10个规范:
1.与后台做交互,通常采用https协议,这样安全.
2.域名 有两种格式
子域名的方式:
https://www.baidu.com.
https://api.baidu.com 这就说明这是百度提供的这个接口,这种存在跨域问题(域名或者端口号不同)浏览器有同源策略,就会把这个请求回来的时候浏览器就给阻止了(同一个域名不会阻止,不同的域名就会阻止)。需要自己解决跨域问题。
URL方式:同一个域名,知识URL不同。
https://www.baidu.com.
https://www.baidu.com/api/
3.版本 ,接口不能保证不改动
https://www.baidu.com/api/v1 第一版
https://www.baidu.com/api/v2 第二版
能加在URL上,也可以加在请求头上。 跨域时,引发发送过多次数。
前缀:
https://www.baidu.com/api/v2
面向资源编程:本质就是把网络上的任何东西都当做是一个资源,对这个资源可以进行增删改查。一个资源应该是个名词,所以一个URL后面跟一个名词,这个名词就代表这个东西,我要对这个东西进行增删改查(get,delete,put,post...都是动作)对这个资源进行不同的动作进行不同的操作。
面向对象编程:
面向切面编程:
4.路径上所有的东西都是资源,均使用名词来表示。不用动词get,delet。。。
https://www.library.com.api/v1/books
https://www.library.com.api/v1/book
5.method(请求的方式)来表示增删查改,链接上看不出来只有在请求方式上能看出来增删查改。
https://www.library.com.api/v1/books/ get请求,获取所有书
https://www.library.com.api/v1/books/ post请求,新增一本书
https://www.library.com.api/v1/book/1 delete请求,删除一本id为1的书
https://www.library.com.api/v1/book/1 get请求,获取id为1的这本书
https://www.library.com.api/v1/book/1 put/patch请求,修改id为1的这本书 put代表全更新是全部更新
6.在URL上传参的形式传递搜索条件过滤条件
https://www.library.com.api/v1/books?limit=10 只拿前十本书
https://www.library.com.api/v1/books?price=20 只拿价格为20元的书
7.状态码 ----->给客户做提示 状态码跟code结合一起用
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
等价于:{'status':100,}
class OrderView(View): def get(self,request,*args,**kwargs):
response = {
'code':100,
'msg':'successful'
} return HttpResponse(json.dumps(response),status=201) #状态码也可以写其他的 用code还是状态码 对状态码有要求的可以写
8.错误处理,,返回错误信息给客户,error当做key
{'status':101,'error':"不可以这样"}
9.返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET / order 获取所有订单 collection:返回资源对象的列表(数组)
GET / order /1 获取一个订单的详细 collection/resource:返回单个资源对象
POST /order 返回新生成的的订单 collection:返回新生成的资源对象
PUT / order 修改全部部订单 collection/resource:返回完整的资源对象
PATCH /order 修改局部订单 collection/resource:返回完整的资源对象
DELETE /order collection/resource:返回一个空文档
10.返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
返回结果中提供链接(获取一本书)
{
id:1
name:xxx
price:12
publish:www.xxx.com.api/v1/publish/1
}
面试:谈谈你对restful api 规范
他都有什么?谈谈你对他的认识?
面试就是讲故事!
本质上就是一些规范,定义一些规范让咱们写api的时候更好作区分更容易让我们的后台去做处并且让前端更容易记住这些URL。就是在这个URL上体现api的操作。
。
。
。
restful 规范(建议)的更多相关文章
- RESTful规范建议
RESTful概述 RESTful是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. REST是Representational State T ...
- RESTful 规范
RESTful 规范 前言 rest 是一种软件架构风格,如果使用的是 rest 接口,那么就可以说你的接口是 restful. rest接口是围绕''资源''展开的,利用 HTTP 的协议,其实 r ...
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
- Django restful 规范
一.REST Frame Work REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征状态转移&q ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
- day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等
DjangoRsetFramework学习---restful规范,解析器组件,Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...
- 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...
- day 87 DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组 ...
- 01 drf源码剖析之restful规范
01 restful规范 目录 01 restful规范 1. 什么是restful规范 2.restful规范详细 1. 什么是restful规范 restful是一套规则,是程序间进行数据传输的一 ...
随机推荐
- C#深度学习のTask(基于任务的异步模型)
一.Task关键字解释 Task 类的表示的单个操作不会返回一个值,通常以异步方式执行. Task 对象是一种的中心思想 基于任务的异步编程模式 首次引入.NET Framework 4 中. 因为由 ...
- Hive数据仓库工具安装
一.Hive介绍 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单SQL查询功能,SQL语句转换为MapReduce任务进行运行. 优点是可以通过类S ...
- tomcat 设置连接数
maxConnections.maxThreads.acceptCount的含义及关系maxThreads:tomcat同时处理请求的任务个数,默认值为200maxConnections :tomca ...
- Google Colab 基本操作
## 上传 from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('Use ...
- Linux:Day7(上) find、文件特殊权限、if语句
文件查找: 在文件系统上查找符合条件的文件: 文件查找工具:locate,find locate:非实时查找(数据库查找) find:实时查找: locate: 依赖于事先 构建的索引:索引的构建是在 ...
- 一.html介绍
一.html1.就是一个文本文档,写标记语言,由浏览器软件进行渲染得到想要的网页效果2.版本:h4,h5 二.常用的h5标签1.块状标签: p:段落 div:块 span:同行块 h1-h6:6级标题 ...
- ArrayList中ConcurrentModificationException
java中两种基本的集合结构ArrayList和LinkedList底层有两种不同的存储方式实现,ArrayList为数组实现,属于顺序存储,LinkedList为链表实现,属于链式存储,在对Arra ...
- Java的错误类型
程序的错误分为:编译期语法错误.运行期异常错误和运行期逻辑错误 (1)编译期语法错误可以借助Eclipse的帮助方便地定位错误,并进行修改 如: (2)运行期异常,即 没有语法错误,编译可以通过,但运 ...
- vue-cli sass安装
一.安装对应依赖node模块: npm install node-sass --save-dev npm install sass-loader --save-dev 二.打开webpack.base ...
- BZOJ1004 HNOI2008 Cards Burnside、背包
传送门 在没做这道题之前天真的我以为\(Polya\)可以完全替代\(Burnside\) 考虑\(Burnside\)引理,它要求的是对于置换群中的每一种置换的不动点的数量. 既然是不动点,那么对于 ...