码迷,mamicode.com
首页 > 其他好文 > 详细

Django Rest Framework

时间:2018-05-30 21:12:24      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:nbsp   ima   授权   work   令牌   art   limit   下一步   存在   

什么是RESTful?

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

 

RESTful API设计规范

1.API使用HTTPS与用户进行通信

2.域名

  • https://api.example.com
  • https://example.com/api/

3.版本

  • https://example.com/api/v1/
  • https://api.example.com/v1
  • 设置请求头(跨域时会引发多次请求)

4.路径

  • https://example.com/api/v1/orders/
  • https://example.com/api/v1/animals/

5.method

  • GET :从服务器上获取资源(一项或多项)
  • POST :在服务器上新建一个资源
  • PUT :在服务器更新资源(客户端提供改变后的完整资源)
  • DELETE :从服务器删除资源
  • PATCH :在服务器更新资源(客户端提供改变的属性,局部)

6.过滤(URL进行传参)

  • https://example.com/api/v1/orders?limit=10

  • https://example.com/api/v1/orders?offset=10

  • https://example.com/api/v1/orders?page=10

7.状态码

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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

8.错误处理 状态时4xx时,应该返回错误信息,error当中key

{
    error: "Invalid API key"
}

9.返回结果,针对不同操作,服务器返回符合规范的结果

GET /order:返回资源对象的列表(数组)
GET /order/1:返回单个资源对象
POST /order/:返回新生成的资源对象
PUT /order/1:返回完整的资源对象
PATCH /order/1:返回完整的资源对象
DELETE /order/1:返回一个空文档

10.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"
}}

 

 

Django Rest Framework框架实现

基本流程

urls.py

from django.conf.urls import url, include
from app01 import views

urlpatterns = [
    url(rindex, views.IndexView.as_view()),
]

views.py

from rest_framework.views import APIView
from rest_framework.response import Response

class IndexView(APIView):

    def dispatch(self, request, *args, **kwargs):
        print(before)
        ret = super(IndexView, self).dispatch(request, *args, **kwargs)
        print(after)
        return ret

    def get(self, request):
        return Response(GET)

    def post(self, request):
        print(执行post)
        return Response(POST)

    def put(self, request):
        return Response(PUT)

    def delete(self, request):
        return Response(delete)

 

认证和授权

http://www.cnblogs.com/wupeiqi/articles/7805382.html  

  

 

 

 

Django Rest Framework

标签:nbsp   ima   授权   work   令牌   art   limit   下一步   存在   

原文地址:https://www.cnblogs.com/mituxiaoshutong/p/9112651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!