REST 相关
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 有两种理解:
- 通过 HTTP 方法(POST、GET等)操作表征层(HTML、JPEG、Json、XML等)。
第一种理解只是标准的 HTTP 规范,REST 是要在 response 中带有 transfer 当前的 state 。
state transfer,状态转移。representational,形容词,表述性的、代表的、具象的。HTTP 协议是无状态的(stateless),state transfer 可以把这个状态转移给客户端“保留下来”,Roy Fielding 认为 representational 的 state transfer 好。
参考季文昊的回答:HTTP 协议是无状态的——如果第一次请求查询了
第一页的资源,接着想查询第二页的话需要告诉服务器查询第二页而不是说给我下一页。REST 是要在 response 中,把state传递给客户端。
查询第一页时,response 中需要包含当前 :- 当前接口地址(,及其含义)
- 下一页接口地址(,及其含义)
- 用到当前接口的网页地址
等
版本
有两种方式:
正宗的是在 request header 的 Accept 中指定版本。如
Accept: application/vnd.spire-io.session+json;version=1.0
但是更常见的是在 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 |
- HATEOAS:Hypermedia as the engine of application state。
- Hypermedia :REST APIs must be hypertext-driven
- URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作,用 HTTP Status Code传递Server的状态信息。
- URL 使用名词而不是动词。
- http://www.zhihu.com/question/28557115/answer/48120528?utm_campaign=webshare&utm_source=weibo&utm_medium=zhihu
- http://www.infoq.com/cn/minibooks/web-based-apps-archit-design#minibookDownload
- 非标准 HTTP header 以 “X-” 开头。
- REST APIs must be hypertext-driven
1.RESTful api 必须是富文本驱动的
2.RESTful api 不依赖于通讯协议
3.RESTful api 不能改变 HTTP 协议中已有内容的定义(如:POST、GET等)
4.RESTful api 应该可以靠一个初始URI(initial URI)和一系列标准媒体类型(standardized media types)就可以使用,不需要任何额外信息。 - Designing a RESTful Web API
- Resources are mapped to URLs, actions are mapped to verbs and the rest goes in the headers.
- Some REST best practices
- Principles of good RESTful API Design
- 理解本真的REST架构风格
- 使用 Struts 2 开发 RESTful 服务
例如向服务端请求一个图片资源,response header 就是传输其他数据的唯一方式了。
In the case of non-hypermedia resources (e.g. images) the http headers will be the only way to add API metadata to the resource such as state transitions. I think it's generally a good idea to always include the transitions in the headers as it becomes possible to perform a transition without parsing the request body.
examples:
- 关于安全:自己的接口就用https,加上一个key做一次hash放在最后即可。考虑到国情,HTTPS在无线网络里不稳定,可以使用Application Level的加密手段把整个HTTP的payload加密。有兴趣的朋友可以用手机连上电脑的共享Wi-Fi,然后用Charles监听微信的网络请求(发照片或者刷朋友圈)。
如果是平台的API,可以用成熟但是复杂的OAuth2,新浪微博这篇:授权机制说明
REST 相关的更多相关文章
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- SQL Server相关书籍
SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
HostingEnvironment是承载应用当前执行环境的描述,它是对所有实现了IHostingEnvironment接口的所有类型以及对应对象的统称.如下面的代码片段所示,一个HostingEnv ...
- virtualbox linux虚拟机相关
linux虚拟机设置为静态IP 在virtualbox中安装好linux虚拟机后,如果采用的是NAT方式的话,linux虚拟机默认采用dhcp方式自动上网,而且用的是NetworkManager服务而 ...
- WebGIS中等值面展示的相关方案简析
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值面是气象.环保等相关项目上常用到的效果展示.在传统的CS项 ...
- .NET同步与异步之相关背景知识(六)
在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...
- mysql 5.7中的用户权限分配相关解读!
这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...
随机推荐
- C#System.Net.Mail采用简单邮件传输协议发送邮件
引用: using System.Net.Mail; public class EmailHelper { public static bool SendEmail(string title, str ...
- c# 基础复习1
1. 类和对象 1.1 类和对象的概念 类:对象的类型,它不同于 int 等基本数据类型,因为类具有行为:也可以说是具有相 同特征和行为的一组对象的集合. 对象:对象是一个个你能看得见,摸得着的实体, ...
- js学习笔记——数组方法
join() 把数组中所有元素转化为字符串并连接起来,并返回该字符串, var arr=[1,2,3]; var str=arr.join("#"); //str="1# ...
- CI框架中遇见的一些错误和解决方法 笔记
ps:根据经验不断修改和更新,欢迎指出错误~ 1. An uncaught Exception was encountered Type: Exception Message: Session: Co ...
- angular-route 里面templeteUrl 动态加载
https://segmentfault.com/q/1010000002524964
- Css3小技术
圆角border-radius border-radius:length *注: 这是一个缩写,相当于四个角设置同样的值,用px或者百分比都可以,想要成为圆形,就用50%,你也可以单独设置每个角,语法 ...
- 获取当前页面的完整URL
PHP实现 #测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."< ...
- C语言的画图(圆形动画)
#include <stdio.h> #include <malloc.h>#include<graphics.h> #define LEN sizeof(stru ...
- TextField控件详解2
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- 手动替换GCC版本
当我们的系统里面会有2个以上版本的gcc时,系统会缺省的默认一个gcc版本,当然我们可以更改系统的默认配置,来降低gcc.g++的版本以满足不同的需求. 1.查看GCC的版本信息 $ls /usr/b ...