RESTframework简介
什么是RESTful?
RESTful是一种开发理念,REST是Roy Thomas Fileding在他博文提出的.REST特点;url简洁,将参数通过url传递到服务器,简单就是说URL定位资源,用HTTP动词描述操作.
RESTful架构:
- 每一个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
- URL节后不能含有动词
- 一般接口返回的是JSON和XML类型的,JSON一般用的多
- 定义接口统一,使用起来比较方便
RESTful设计方法:
API接口应该部署到专用的域名下,如果API不需要扩展,可以放到主域名下,API版本号放到URL中或者放到请求头信息中,路径就是表示API的具体网站,每个网站都有对应的资源,API中的名词应该使用复数,
常见的HTTP的动词
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- DELETE(DELETE):从服务器删除资源。
不常用的HTTP动词
- PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
- HEAD:获取资源的元数据。
- OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
过滤信息
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
常见的状态码
- 200 OK - [GET]:服务器成功返回用户请求的数据
- 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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
返回处理
- GET /collection:返回资源对象的列表(数组)
- GET /collection/resource:返回单个资源对象
- POST /collection:返回新生成的资源对象
- PUT /collection/resource:返回完整的资源对象
- PATCH /collection/resource:返回完整的资源对象
- DELETE /collection/resource:返回一个空文档
超媒体(Hypermedia API)
github(api.github.com)

访问第一个

Django开发REST接口
一个简单的REST接口案例
# 路由
urlpatterns = [
url(r'^games/$', views.GamesAPIView.as_view()),
url(r'^games/(?P<id>\d+)/$', views.GameAPIView.as_view())
]
视图函数代码
class GamesAPIView(View):
"""
查询所有的游戏
""" def get(self, request):
games = GameInfo.objects.all()
game_list = []
for game in games:
game_list.append({
'id': game.id,
'gtitle': game.gtitle,
'game_date': game.game_date,
'game_download': game.game_download,
'gcommnet': game.gcommnet,
'image': game.image.url if game.image else ''
})
# 要命令序列化就需要把safe设置成False
return JsonResponse(game_list, safe=False) def post(self, request):
"""
新增游戏
:param request:
:return:
""" body_data = request.body
data_str = body_data.decode()
game_dict = json.loads(data_str) game = GameInfo.objects.create(
gtitle=game_dict['gtitle'],
game_date= game_dict['game_date'], ) return JsonResponse({
'id': game.id,
'gtitle': game.gtitle,
'game_date': game.game_date,
'game_download': game.game_download,
'gcommnet': game.gcommnet,
'image': game.image.url if game.image else ''
}, status=201) class GameAPIView(View):
def get(self, request, id):
"""
获取单个游戏的信息
:param request:
:param pk:
:return:
""" try:
game = GameInfo.objects.get(id=id)
except GameInfo.DoesNotExist:
return HttpResponse(status=404)
print(game)
return JsonResponse({
'id': game.id,
'gtitle': game.gtitle,
'game_date': game.game_date,
'game_download': game.game_download,
'gcommnet': game.gcommnet,
'image': game.image.url if game.image else ''
}) def put(self, request, id):
"""
修改游戏信息
:param request:
:param pk:
:return:
"""
try:
game = GameInfo.objects.get(id=id)
except GameInfo.DoesNotExist:
return HttpResponse(status=404) body_data = request.body
data_str = body_data.decode()
game_dict = json.loads(data_str) game.gtitle = game_dict['gtitle']
game.game_date = game_dict['game_date']
game.save()
return JsonResponse({
'id': game.id,
'gtitle': game.gtitle,
'game_date': game.game_date,
'game_download': game.game_download,
'gcommnet': game.gcommnet,
'image': game.image.url if game.image else ''
}) def delete(self, request, pk):
"""
删除游戏
:param request:
:param pk:
:return:
"""
try:
game = GameInfo.objects.get(id=id)
except GameInfo.DoesNotExist:
return HttpResponse(status=404) game.delete() return HttpResponse(status=204)
查询所有数据

增加数据(post提交后面要加/)

获取单个数据

修改数据

删除数据


REST接口的核心
1.将数据转换成模型类的对象(将前端的数据,反序列化为模型类对象,保存到数据库中)
2.将模型类的对象转换为响应的数据
3.操作数据库(将数据库数据序列化为前端需要的格式)
序列化:
把将一种对象的状态信息装换成可以存储或者可以传输形式的过程,比如将模型类转换成JSON数据,整个过程将序列化(序列化和反序列化执行的过程相似的,也就是可以封装代码)
RESTframework简介的更多相关文章
- REST-framework快速构建API--分页
分页简介 当数据量特别大的时候,我们通过API获取数据会非常慢,所以此时我们需要将数据"分批次"取出来,这里的"分批次"就是,分页! REST框架支持自定义分页 ...
- rest-framework之频率控制
rest-framework之频率控制 本文目录 一 频率简介 二 自定义频率类,自定义频率规则 三 内置频率类及局部使用 四 内置频率类及全局使用 五 源码分析 回到目录 一 频率简介 为了控制用户 ...
- Restframework介绍
1.REST介绍 REST与技术无关,它代表的是一种软件架构风格,全称Representational State Transfer,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它 ...
- REST-framework之频率组件
REST-framework之频率控制 一 频率简介 为了控制用户对某个url请求的频率,比如,一分钟以内,只能访问三次 二 自定义频率类,自定义频率规则 自定义的逻辑 ""&qu ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
随机推荐
- Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...
- C语言第六讲,数组
C语言第六讲,数组 一丶什么是数组 数组,就是一整块的连续内存空间. 且类型都是一样的.大小一样 比如: 1.1数组元素的访问 我们要访问数组,例如上面,我们访问元算2,元素3等等怎么访问.. 比如有 ...
- Linux下搭建DNS缓存服务器
CentOS 6.10搭建本地DNS缓存服务器系统环境 1 [root@test ~]# cat /etc/redhat-release 2 CentOS release 6.10 (Final) 3 ...
- U3D Transform用法
最近在学习unity3d,下面对Transform类做一个小结 一.常用属性和方法 1.1 常用属性: 用代码展示一下上面的一些属性,值得注意的是myCube是mySphere的父物体 using U ...
- 数据库内连接GROUP BY查询外键表数据行的总数
最近看了看SQL,刚好遇到这个问题. INNER JOIN [外键表] ON [主键表] 内链接,用 GROUP BY 分组外键数据,COUNT(*)计算该外键数据总行数,最后用 ORDER BY 排 ...
- Shaping Regions(dfs)
Shaping Regions Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 124 Solved: 39[Submit][Status][Web B ...
- 解决VM提示:VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for temporary files.
问题: 在开启虚拟机的时候报: VMware Workstation cannot connect to the virtual machine. Make sure you have rights ...
- 【作业三】结队任务二-----CourseManagement
031302517 031302319 ps:共同完成一篇随笔,文章中的第一人称我(517),队友(319) 一.功能分析+实现思路+结队讨论 这里我将功能分析和实现思路还有结对过程中的一些讨论结合在 ...
- vue实现双向绑定的简单原理: defineProperty
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【读书笔记】iOS-iPad与iPhone
在开发通用型应用的时候,你总是需要记住,iPad并不是一个大大的iPod touch,为iPad开发的应用的界面应该更好地利用iPad的大屏幕,而不应该是iPhone应用的复制品. 参考资料:< ...