REST 相关


REST:Representational State Transfer,表现层状态转化(出现在阮一峰的博客 理解RESTful架构 中,但是,很明显,Representational 是形容词。全称是 Resource Representational State Transfer。

  • Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
  • Representational:某种表现形式,比如用JSON,XML,JPEG等;
  • State Transfer:状态变化。通过HTTP动词实现。

出处

Roy Fielding 的毕业论文。
全文:Architectural Styles and the Design of Network-based Software Architectures
REST 章节:Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST)

为什么要 RESTful

移动互联网,各种client层出不穷,前后端分离可以为只提供一套后端服务供不同 client 使用。

?? 不明白的

resource REpresentational State Transfer 有两种理解:

  1. 通过 HTTP 方法(POST、GET等)操作表征层(HTML、JPEG、Json、XML等)。
  2. 第一种理解只是标准的 HTTP 规范,REST 是要在 response 中带有 transfer 当前的 state 。
    state transfer,状态转移。representational,形容词,表述性的、代表的、具象的。HTTP 协议是无状态的(stateless),state transfer 可以把这个状态转移给客户端“保留下来”,Roy Fielding 认为 representational 的 state transfer 好。
    参考季文昊的回答:

    HTTP 协议是无状态的——如果第一次请求查询了第一页的资源,接着想查询第二页的话需要告诉服务器查询第二页而不是说给我下一页。REST 是要在 response 中,把state传递给客户端。
    查询第一页时,response 中需要包含当前 :

  3. 当前接口地址(,及其含义)
  4. 下一页接口地址(,及其含义)
  5. 用到当前接口的网页地址

版本

有两种方式:

  1. 正宗的是在 request header 的 Accept 中指定版本。如

    Accept: application/vnd.spire-io.session+json;version=1.0

  2. 但是更常见的是在 URI 中写明。

缓存

  • response header 中得到的 ETag(或 Last-Modified),下次请求时在 reqeust header 中放入 If-None-Match(或 If-Modified-Since)中,如果资源没有修改过就会返回 304 Not Modified。
  • response header 主要中通过 Expries(指定绝对时间)和 Cache-Control 的 max-age(指定相对时间,形如 Cache-control: max-age=5)控制客户端的缓存行为。

ETag (entity tag) is an identifier, commonly a hash.

认证(Authorization)

"username:password" base64后,作为 request header 中的 Authorization 参数传给服务端,形如 Authorization: Basic bHJlaTp5ZWFocmlnaHQ=。这种形式必须要用 https, 否则很容易被截获。

OAuth2 is a common way of doing authorization for 3rd party applications using an API。

相关

HTTP: Hypertext Transfer Protocol
REST: resource REpresentational State Transfer
| what | when |
|------|------|
| HTTP v0.9 | 1991 |
| HTTP v1.0 | 1996 |
| HTTP v1.1 | 1997 |
| REST | 2000 |
| HTTP v2.0 | 2015 |

examples:

https://api.github.com/
https://dev.twitter.com/rest/public


  1. 关于安全:自己的接口就用https,加上一个key做一次hash放在最后即可。考虑到国情,HTTPS在无线网络里不稳定,可以使用Application Level的加密手段把整个HTTP的payload加密。有兴趣的朋友可以用手机连上电脑的共享Wi-Fi,然后用Charles监听微信的网络请求(发照片或者刷朋友圈)。
    如果是平台的API,可以用成熟但是复杂的OAuth2,新浪微博这篇:授权机制说明

REST 相关的更多相关文章

  1. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  2. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  3. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  4. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  5. 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?

    HostingEnvironment是承载应用当前执行环境的描述,它是对所有实现了IHostingEnvironment接口的所有类型以及对应对象的统称.如下面的代码片段所示,一个HostingEnv ...

  6. virtualbox linux虚拟机相关

    linux虚拟机设置为静态IP 在virtualbox中安装好linux虚拟机后,如果采用的是NAT方式的话,linux虚拟机默认采用dhcp方式自动上网,而且用的是NetworkManager服务而 ...

  7. WebGIS中等值面展示的相关方案简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值面是气象.环保等相关项目上常用到的效果展示.在传统的CS项 ...

  8. .NET同步与异步之相关背景知识(六)

    在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  10. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...

随机推荐

  1. 让 asp.net mvc 支持 带有+ _ 等特殊字符的路由

    最近配置微信 业务域名 时,需要在服务器的根目录中上传一个文本文件,而这个文本文件需要放这样的目录中: 于在就在 服务器目录中创建了对应的文件夹,并将kuPv.txt上传,但是访问时,却怎么也访问不到 ...

  2. shell中对于命令的搜寻顺序

    当你在shell命令行输入一条命令时,shell的搜寻顺序是如何的呢?当你的脚本名字和shell中的函数名字重名,shell是如何决定运行哪一个的? 在shell中,shell对于命令的搜寻优先级为: ...

  3. QQ联系客服

    $('.side').bind('mouseenter mouseleave',function(e){ if(e.type=="mouseenter"){ if(!$(this) ...

  4. cygwin编译SDL1.2

    1.下载了一个SDL-1.2.14.tar.gz 2.下载一个cygwin64对SDL-1.2.14.tar.gz解压 tar -zxvf SDL-1.2.14.tar.gz 在网上找的大概是需要需要 ...

  5. uC/OS-II中的时间 (转)

    时间是一个非常重要的概念,我们和朋友出去游玩需要约定一个时间,做事情也需要花费一段时间,总之,我们的生活离不开时间.操作系统也一样,也需要一个时间来规范其任务的执行. 我们生活中,时间的最小单位是秒, ...

  6. 关于把A表中的数据复制到B表中。

    最近公司需要把sql中的数据给整理出来,这就牵涉到数据转移问题. 我平时是很少接触sql这一块的.所以碰到这个问题甚是伤脑筋. 不过还好,这问题并不像我想象中的那么的困难. 以前做过把数据插入到临时表 ...

  7. JNI错误记录--JNI程序调用本地库时JVM崩溃

    什么是JNI内存泄露,基本的避免方法 : http://www.ibm.com/developerworks/cn/java/j-lo-jnileak/ 最近的课题中需要用到Spark,同组同学负责的 ...

  8. python 3.5 格式化字符串输出

    #!/usr/bin/env python #encoding: utf-8 #.strip('里面可以去掉字符串中两边的字符') name = input('name :').strip(' ') ...

  9. chinaunix:腾讯面试题

    腾讯电商面试回来,发现我太菜了,缺乏技术深度. 笔试题感觉不难,但是做了之后总是发觉少点什么东西,深度!这是这场面试总结出来的. 凭记忆分享下笔试,面试题.大家一起解决,然后分享下该看什么书,可以解决 ...

  10. BZOJ2213: [Poi2011]Difference

    2213: [Poi2011]Difference Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 343  Solved: 108[Submit][St ...