python-django rest framework框架
1.API 接口 是什么,干什么用的?
API简单的来说就是一个url
- http://www.oldboyedu.com/get_user/ - http://www.oldboyedu.com/get_users/ 两个用途: - 为别人提供服务 - 前后端分离
为什么要做前后端分离:
解耦
把前端分离出来,可以用前端框架,开发起来非常快
一个后端程序可以给多个客户端服务
2. restful是什么
- 表征状态转移 - 面向资源编程,对互联网上的任意东西都视为资源。 - http://www.oldboyedu.com/get_user/ - http://www.oldboyedu.com/get_img/1.png
3.普通的api与 restful api 的区别
普通API: 接口太多 姑娘列表: http://www.oldboyedu.com/get_girls/ http://www.oldboyedu.com/add_girl/ http://www.oldboyedu.com/del_girl/1/ http://www.oldboyedu.com/update_girl/1/ restful api: 姑娘列表: http://www.oldboyedu.com/girls/ GET: 获取 POST: 添加 PUT: 更新 DELETE:删除
4. restful api 规范: 对请求有一个约定 ,遵循更好,不遵循也能用
- URL api.sssss.com 有跨域的问题,因为不同源 http://www.sssss.com/api - url名词
视网络上任何东西都是资源,均使用名词表示(可复数)
-
- https://api.example.com/v1/zoos
- https://api.example.com/v1/animals
- https://api.example.com/v1/employees
- 版本 : 版本更新 http://www.sssss.com/api/v1/ - 提交方式 通过请求方式来判断你要做的操作 method : GET :从服务器取出资源(一项或多项) POST :在服务器新建一个资源 PUT :在服务器更新资源(客户端提供改变后的完整资源) #PATCH :在服务器更新资源(客户端提供改变的属性) DELETE :从服务器删除资源 - status : 不同的状态码代表着不同的意思 部分成功可以用 code来操作: 1001 成功,1002部分成功,1003 全部失败 - Hypermedia link :看情况而定。可以直接返回json数据,也可以返回 一个url ,让前端再次放送请求查看具体的信息 - 错误详细 : 要返回给前端
OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) NO CONTENT - [DELETE]:用户删除数据成功。 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。 更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
5. restful api 的两种方式
方式一: http://www.oldboyedu.com/girls/ GET: 获取 POST: 添加 PUT: 更新 DELETE:删除 方式二: http://www.oldboyedu.com/girls/ - 姑娘列表 http://www.oldboyedu.com/girl/1/ - 单独一个
6.基于Django做API
- FBV
---urls from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^users/', views.users), url(r'^user/(\d+)', views.user), ] ---views from django.shortcuts import render,HttpResponse import json def users(request): response = {'code':1000,'data':None} response['data'] = [ {'name':'盛松','age':19}, {'name':'鲁宁','age':20}, {'name':'解析博','age':5}, ] return HttpResponse(json.dumps(response),status=200) def user(request,pk): if request.method == "GET": return HttpResponse(json.dumps({'name':'盛松','age':19})) elif request.method == "POST": return HttpResponse(json.dumps({'code':1111})) elif request.method == "PUT": pass elif request.method == "DELETE": pass
- CBV
至于为什么不直接用原始的django CBV做api,就是因为它的dispatch方法功能太少了,许多功能需要自己开发。
---urls urlpatterns = [ url(r'^users', Users.as_view()), ] ---views from django.views import View from django.http import JsonResponse class Users(View): def get(self, request, *args, **kwargs): result = { 'status': True, 'data': 'response data' } return JsonResponse(result, status=200) def post(self, request, *args, **kwargs): result = { 'status': True, 'data': 'response data' } return JsonResponse(result, status=200)