什么是REST

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

RESTful API设计规范

  • API与用户的通信协议,总是使用HTTPS协议

  • 域名

  • 版本

  • method

    • GET :从服务器取出资源(一项或多项)

      • 安全且幂等

      • 获取表示

      • 变更时获取表示(缓存)

      • 200(OK) - 表示已在响应中发出

      • 204(无内容) - 资源有空表示

      • 301(Moved Permanently) - 资源的URI已被更新

      • 303(See Other) - 其他(如,负载均衡)

      • 304(not modified)- 资源未更改(缓存)

      • 400 (bad request)- 指代坏请求(如,参数错误)

      • 404 (not found)- 资源不存在

      • 406 (not acceptable)- 服务端不支持所需表示

      • 500 (internal server error)- 通用错误响应

      • 503 (Service Unavailable)- 服务端当前无法处理请求

    • POST :在服务器新建一个资源

      • 不安全且不幂等

      • 使用服务端管理的(自动产生)的实例号创建资源

      • 创建子资源

      • 部分更新资源

      • 如果没有被修改,则不过更新资源(乐观锁)

      • 200(OK)- 如果现有资源已被更改

      • 201(created)- 如果新资源被创建

      • 202(accepted)- 已接受处理请求但尚未完成(异步处理)

      • 301(Moved Permanently)- 资源的URI被更新

      • 303(See Other)- 其他(如,负载均衡)

      • 400(bad request)- 指代坏请求

      • 404 (not found)- 资源不存在

      • 406 (not acceptable)- 服务端不支持所需表示

      • 409 (conflict)- 通用冲突

      • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

      • 415 (unsupported media type)- 接受到的表示不受支持

      • 500 (internal server error)- 通用错误响应

      • 503 (Service Unavailable)- 服务当前无法处理请求

    • PUT :在服务器更新资源(客户端提供改变后的完整资源)

      • 不安全但幂等

      • 用客户端管理的实例号创建一个资源

      • 通过替换的方式更新资源

      • 如果未被修改,则更新资源(乐观锁)

      • 200 (OK)- 如果已存在资源被更改

      • 201 (created)- 如果新资源被创建

      • 301(Moved Permanently)- 资源的URI已更改

      • 303 (See Other)- 其他(如,负载均衡)

      • 400 (bad request)- 指代坏请求

      • 404 (not found)- 资源不存在

      • 406 (not acceptable)- 服务端不支持所需表示

      • 409 (conflict)- 通用冲突

      • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

      • 415 (unsupported media type)- 接受到的表示不受支持

      • 500 (internal server error)- 通用错误响应

      • 503 (Service Unavailable)- 服务当前无法处理请求

    • PATCH :在服务器更新资源(客户端提供改变的属性)

    • DELETE :从服务器删除资源

      • 不安全但幂等

      • 删除资源

      • 200 (OK)- 资源已被删除

      • 301 (Moved Permanently)- 资源的URI已更改

      • 303 (See Other)- 其他,如负载均衡

      • 400 (bad request)- 指代坏请求

      • 404 (not found)- 资源不存在

      • 409 (conflict)- 通用冲突

      • 500 (internal server error)- 通用错误响应

      • 503 (Service Unavailable)- 服务端当前无法处理请求

  • 路径,一切都是资源, 均用名词表示(可以复数)

  • 过滤, 通过在url上传参的形式传递搜索条件

POST和PUT用于创建资源时有什么区别?

状态码

  • 1 开头: 服务器正在处理

  • 2 开头: 服务器处理成功

  • 3 开头: 重定向

  • 4 开头: 客户端错误

  • 5开头 : 服务器错误

    在返回的数据中携带状态码

URl设计上的技巧

  • 使用 _或者 - 让URL可读性更好

  • 使用/表示资源层级关系

  • 使用?过滤资源

  • 使用,或者;表示同级资源关系

    GitHub使用来表示同级关系

基于Django实现

路由

urlpatterns = [
url(r'^users/$', views.Users.as_view()),
url(r'^users2/$', views.user2),
]

视图

import json

def  user2(request):
if request.method=='GET':
dic = {'status':200,'name': 'lqz2', 'age': 18}
return HttpResponse(json.dumps(dic))
elif request.method=='POST':
dic = {'status': 200, 'msg': '修改成功'}
return JsonResponse(dic) class Users(View):
def get(self, request):
dic = {'status':200,'name': 'lqz', 'age': 18}
return HttpResponse(json.dumps(dic)) def post(self, request):
dic = {'status': 200, 'msg': '修改成功'}
return JsonResponse(dic)

RESTful架构解读的更多相关文章

  1. RESTful API 架构解读

    RESTful API 架构解读 首先我们还是先介绍下 RESTful api 的来龙去脉. 首先, RESTful (下文都简称 RESTful api 为 RESTful ) 1.RESTful ...

  2. angular中使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  3. angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  4. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  5. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)

    环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...

  6. [转]理解RESTful架构

    原文地址:http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...

  7. “RESTful架构”相关资料收藏

    [阮一峰]理解RESTful架构 [InfoQ]深入浅出REST 用于构建 RESTful Web 服务的多层架构 REST会是SOA的未来吗? Restful 与 SOA 的关系? 回答1: 注意r ...

  8. RESTful架构入门

    理解RESTful架构 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/09/restful RESTful API 设计指南 - 阮一峰的网络日志http ...

  9. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理

    1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...

随机推荐

  1. zabbix系列~ 监控模式

    一 简介:讲讲监控相关的东西 二 监控模式 Active(主动式)agent —>常用    在Active agent模式下,Zabbix agent启动后,由agent端初始化和Zabbix ...

  2. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  3. hadoop3.x.x错误解决

    错误信息:there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation. 解决方案: (缺少用户定义而造成的)因此编辑启动和关 ...

  4. ubuntu14.04安装Anaconda

    1  安装anaconda 为了安装python等各种依赖包,我安装了Anaconda工具包,在清华源下载了Anaconda的镜像 1.1  下载anaconda 如果用python2.7,就下载An ...

  5. python基础-----变量和简单数据类型

    初识变量 1.变量命名规则: a.字母 b.数字(不能开头) c.下划线 ps.硬性规定,命名必须是字母,数字,下划线,且不能以数字开头. 软性规则,以下划线分割 2.实例: a.写法: age_of ...

  6. 20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算

    一.码云链接 项目名称FAO 码云链接 二.需求分析 实现一个命令行程序: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确 ...

  7. 【Linux】时间同步设置+防火墙设置+SELinux设置

    时间同步设置 在大数据集群环境中,要求每台集群的时间必须是同步的,这样我们就会要求每台集群的时间必须和一台服务的时间是同步的.接下来介绍一下步骤: 1,设置ntp客户端 yum -y install ...

  8. Spring Boot中的initializers的作用分析

    在SpringApplication的实例属性中有一个初始器的属性:List<ApplicationContextInitializer<?>> initializers ,这 ...

  9. mysql死锁-查询锁表进程-分析锁表原因【转】

    查询锁表进程: 1.查询是否锁表 show OPEN TABLES where In_use > 0;   2.查询进程     show processlist   查询到相对应的进程===然 ...

  10. gcc的使用简介与命令行参数说明

    (一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项 (一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称.不同参数的先 ...