- restful(表者征状态转移,面向资源编程)------------------------------------------->约定
从资源的角度审视整个网络,将分布在网络中某个节点的资源通过url进行标识,客户端通过url获取资源的表征,
获得这些表征使应用转变状态。-----------------------------------------------------------是一种软件架构风格。
所有数据是通过网络获取的是操作的数据(增删改查),都是资源-------------------------------互联网上的一切东西都视为资源。
restf规则:
API与用户的通信协议,使用的是http协议
1:域名尽量部署在专有域名之下,若API很简单,不会进一步扩展,可以考虑放在主域名下。
2:应将api的版本号放入url,还可以将版本号放入Http请求头信息中,但不如放在url中方便。
3:在RESTful架构中,每个网址代表一种资源(resource),所以网址中应该有动词,应该使用名词,
而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。
4:用于区别url接口应将API加入到url.
5: 如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
6: 服务器向用户返回的状态码和提示信息。
7 : 如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。
8: 请求方式的不同,进行不同的操作。post----get----put----patch----delete
restful-api:
API与用户的通行协议,总是使用HTTPs协议
api:---------------------------------------------------------------------------------------接口
用途:
1:为别人提供服务----------发送短信
2:前后端分离--------------前后端分离
规范:
1:url+api
https://api.example.com------------------------------------------------------------尽量将API部署在专用域名(会存在跨域问题)
https://example.org/api/-----------------------------------------------------------API很简单
2:名词
资源名必须是名词,不能是动词.....
3:版本
URL-------------------------------------------------------------------------------如:https://api.example.com/v1/
请求头------------------------------------------------------------------------------跨域时,引发发送多次请求
4:提交方式------------------------------------------------------------method
GET:-------------------------------------------------------------------------------从服务器取出资源(一项或多项)
POST:------------------------------------------------------------------------------在服务器新建一个资源
PUT:-----------------------------------------------------------------------------在服务器更新资源(客户端提供改变后的完整资源)
PATCH :----------------------------------------------------------------------------在服务器更新资源(客户端提供改变的属性)
DELETE:---------------------------------------------------------------------------从服务器删除资源
5:json数据------------------------------------------------------------返回json数据
6:status--------------------------------------------------------------状态码
-
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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
更多看这里:https://www.jianshu.com/p/e3a2f31b0d7d
7:aypermedia link-----------------------------------------------------返回链接
-
Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
{"link": { "rel": "collection https://www.example.com/zoos", "href": "https://api.example.com/zoos", "title": "List of zoos", "type": "application/vnd.yourformat+json" }}
8:错误处理
错误处理,状态码是4xx时,应返回错误信息,error当做key。
{
error: "Invalid API key"
}
为什么做前后端分离?
数据的解耦,提高开发效率。
安装:
pip3 install djangorestframework -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com
继承关系:
-
class View(object):-------------------------------------------------view
-
class APIView(View):------------------------------------------------APIview
-
class GenericAPIView(views.APIView):--------------------------------GenericAPIView
-
class GenericViewSet(ViewSetMixin, generics.GenericAPIView)---------GenericViewSet
-
class ModelViewSet(mixins.CreateModelMixin,-------------------------ModelViewSet(增删改查,genericViewset)
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
Django Rest Framework 的的请求生命周期:
hTTP请求 —> wsgi —> 中间件 —> 路由分发 —> 执行对应类的dispatch方法 —> 视图函数 —>返回
采用CBV的请求方式。
网友评论