REST风格笔记
这一篇主要是看了FB的覃超大大的文章,做了一些笔记和自己的思考。
定义: 用URL来定义资源,用HTTP(GET/POST/DELETE/DETC)来描述操作。
1. REST描述的是网络的client和server的一种交互方式,REST本身不实用,实用的是何如设计RESTful API(REST风格的网络接口)
2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心:
www.baidu.com/v1/newsfeed :获取某人的新鲜事
www.baidu.com/v1/friends :获取某人的好友列表
www.baidu.com/v1/profile :获取某人的详细信息
3.用HTTP协议的动词来实现资源的添加,修改,删除等操作,即通过HTTP动词来实现资源的状态流转:
GET 用来获取资源
POST 用来新建资源(也可以用于更新资源)
PUT 用来更新资源
DELETE 用来删除资源
比如: DELETE http://www.baidu.com/v1/friends : 删除某人的好友 (在http parameter指定好友id)
POST http://www.baidu.com/v1/friends : 添加好友
UPDATE http://www.baidu.com/v1/friends : 更新个人资源
禁止使用: GET http://www.baidu.com/v1/delFriends
论文是这样描述的:
GET /tasks -- display all tasks
POST /tasks -- create a new task
GET /tasks/{id} -- display a task by ID
PUT /tasks/{id} -- update a task by ID
DELETE /tasks/{id} -- delete a task by ID
4.Server和Client之间传递某资源的一种表现形式,比如用JSON/XML传输文本,或者用JPG来传输图片,也可以压缩HTTP传输的数据(on-wire data compression)
5.用HTTP Status Code 来传递Server的状态信息(200 -- 成功,500 -- server 代码问题)
----------------------------------------------------
REST : Resource Representational State Transfer 资源在网络中以某种表现形式进行状态转移
Resource : 资源,即数据
Representational : 某种表现形式,比如使用的是json/xml/jpeg
State Transfer : 状态变化,通过HTTP动词来实现
首先我们要知道为什么要使用RESTful结构:
由于各种类型Client层出不穷,RESTful可以通过一套统一的接口为web/ios/Android提供服务
Server的API如何设计才能满足RESTful的要求呢?
1. api version可以放在URL里面,也可以用HTTP的header
/api/v1/
2. URI使用名词而不是动词,并且推荐使用复数
BAD: /getProducts
/listOrders
/retrieveClientByOrder?orderId=1
GOOD: GET /products : will return the list of all products
POST /products : will add a product to the collection
GET /products/4 : will retrieve product #4
PATCH/PUT /products/4 : will update product #4
3. 保证 HEAD 和 GET 方法是安全的,不会对资源状态有所改变(污染)。比如严格杜绝如下情况:
GET /deleteProduct?id=1
4. 资源的地址推荐用嵌套结构。比如:
GET /friends/10375923/profile
UPDATE /profile/primaryAddress/city
5. 警惕返回结果的大小。如果过大,及时进行分页(pagination)或者加入限制(limit)。HTTP协议支持分页(Pagination)操作,在Header中使用 Link 即可。
6. 使用正确的HTTP Status Code表示访问状态
7. 在返回结果用明确易懂的文本(String。注意返回的错误是要给人看的,避免用 1001 这种错误信息),而且适当地加入注释。
8. 关于安全:自己的接口就用https,加上一个key做一次hash放在最后即可。考虑到国情,HTTPS在无线网络里不稳定,可以使用Application Level的加密手段把整个HTTP的payload加密。有兴趣的朋友可以用手机连上电脑的共享Wi-Fi,然后用Charles监听微信的网络请求(发照片或者刷朋友圈)。如果是平台的API,可以用成熟但是复杂的OAuth2,
新浪微博这篇: http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E
spring mvc : https://spring.io/guides/gs/rest-service/
可以好好了解一下这边文章:http://www.infoq.com/cn/articles/webber-rest-workflow/
https://www.zhihu.com/question/27785028
zhihu.com,表示全网可见,在http://zhihu.com这个包里
question就是函数名
27785028是路径参数,表示题号
当我回答你的时候,请求的是POST下的重载,我输入的内容就作为报文参数
当知友访问这个链接的时候,浏览器接收到的http响应就是GET重载下的返回值
REST风格笔记的更多相关文章
- Java学习笔记(四)——google java编程风格指南(上)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- Java学习笔记(五)——google java编程风格指南(中)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- Java学习笔记(六)——google java编程风格指南(下)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html
概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...
- 读书笔记 |Google C++编程风格指南
Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...
- python笔记之编程风格大比拼
python笔记之编程风格大比拼 虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的python程序和大家一块分享,下面是我找到的一篇关于各类python程序员的编程风格的比较 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换
一.什么是人脸识别 老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333 啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别. 二.One-shot(一次)学习 假设我们 ...
- 《Essential C++》读书笔记 之 面向过程编程风格
<Essential C++>读书笔记 之 面向过程编程风格 2014-06-18 2.2 调用(invoking)一个函数 2.2.1 Pass by Reference语义 在函数sw ...
- 《Essential C++》读书笔记 之 泛型编程风格
<Essential C++>读书笔记 之 泛型编程风格 2014-07-07 3.1 指针的算术运算(The Arithmetic of Pointer) 新需求1 新需求2 新需求3 ...
随机推荐
- timestamp 转 date 处理后再转timestamp
package com.jmu.ccjoin.service.impl; import java.sql.Timestamp;import java.util.Calendar;import java ...
- EhCache+Redis实现分布式缓存
Ehcache集群模式 由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降 ...
- POJ1474:Video Surveillance(求多边形的核)(占位)
A friend of yours has taken the job of security officer at the Star-Buy Company, a famous depart- me ...
- 怎么解决Failed to load the JNI shared library
怎么解决Failed to load the JNIshared library 解决Failed to load the JNIshared library唯一的方法就是重新安装eclipse, ...
- bzoj 5072 小A的树 —— 树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5072 由于对于一个子树,固定有 j 个黑点,连通块大小是一个连续的范围: 所以记 f[i][ ...
- 洛谷P1290 欧几里德的游戏
题目:https://www.luogu.org/problemnew/show/P1290 只要出现n>=2*m,就可以每次把较大的数控制在较小的数的一倍与二倍之间,则控制了对方的走法: 每次 ...
- 865C
二分+期望dp 好神奇啊...出题人太神了! 我们发现dp之间的关系不满足是一个dag,那么我们只能用高斯消元,但是由于这里是取最小值,需要取min,也不能用高斯消元,于是我们想出了一个奇妙的方法 我 ...
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- 3.11-3.15 HDFS HA
一.背景 1. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF).对于只有一个NameNode的集群, 若NameNode机器出现故障,则整个集群将无法使用,直到Nam ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时5
课时5 数据驱动的图像分类方式:K最邻近与线性分类器(下) 在参数化方法中,我们要做的是构造一个函数,输入一张图片,对每一类输出一个数值.对任意一张图片,我们会计算出它到底属于哪一类.这些参数有时候也 ...