这一篇主要是看了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风格笔记的更多相关文章

  1. Java学习笔记(四)——google java编程风格指南(上)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  2. Java学习笔记(五)——google java编程风格指南(中)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  3. Java学习笔记(六)——google java编程风格指南(下)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  4. 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

    概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...

  5. 读书笔记 |Google C++编程风格指南

    Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...

  6. python笔记之编程风格大比拼

    python笔记之编程风格大比拼 虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的python程序和大家一块分享,下面是我找到的一篇关于各类python程序员的编程风格的比较 ...

  7. DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换

    一.什么是人脸识别 老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333 啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别. 二.One-shot(一次)学习 假设我们 ...

  8. 《Essential C++》读书笔记 之 面向过程编程风格

    <Essential C++>读书笔记 之 面向过程编程风格 2014-06-18 2.2 调用(invoking)一个函数 2.2.1 Pass by Reference语义 在函数sw ...

  9. 《Essential C++》读书笔记 之 泛型编程风格

    <Essential C++>读书笔记 之 泛型编程风格 2014-07-07 3.1 指针的算术运算(The Arithmetic of Pointer) 新需求1 新需求2 新需求3 ...

随机推荐

  1. 怎么显示隐藏Mac上的隐藏文件

    打开终端,输入:defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.app ...

  2. vi编辑器设置行号可见

    vi 设置行号 需要切换到命令模式下,输入set number :set number 按下回车即可

  3. JQuery树形插件Dynatree的包装对象

    这是JQuery Dynatree插件的包装对象,做了些改进和增强,增加了右键菜单,以及相应事件等扩展1. [代码]MagicDTree的基本使用 <SCRIPT type=text/javas ...

  4. html5--6-9 CSS选择器6--伪类选择器

    html5--6-9 CSS选择器6--伪类选择器 实例 @charset="UTF-8"; /*:root{background: green}*/ /*li:first-chi ...

  5. 如何给lemon开无限栈

    进入终端 输入"ulimit -s unlimited" 输入"lemon" 把lemon源程序拖进来,接着在弹出的lemon界面上操作即可.

  6. laravel 自定义分页 offset 和 limit 的使用

    laravel 本身有一个自带的快速分页方法 paginate,只需要传入每页显示多少条数据就可以 了,但是如果想使用自定义从哪里开始呢,这时候就可以使用offset 和 limit 的组合,offs ...

  7. Git分布式版本控制工具

    一.安装Git  1.下载Windows版的Git:msysgit:官方下载地址:http://msysgit.github.io,安装选定要安装的目录(路径杜绝中文),剩下的按照默认安装即可,参考: ...

  8. ccflow_003.驰骋流程引擎表单方案

    003.驰骋流程引擎表单方案 设计流程主要有四个步骤 设计成型的效果图 表单的展示效果 表单方案 提供了八种表单模式 内置傻瓜表单 设计好的傻瓜表单演示 运行查看效果 内置自由表单 这是已经设计好的自 ...

  9. C#SuperSocket的搭建--通过配置启动

    之前我们借助一个SuperSocket实现了一个简易版的服务器, 但是不管是Server还是Session都是使用框架的,本篇博客我们要实现自己的Server和Session,来重写框架原生的Serv ...

  10. poj3069【贪心,水】

    妈蛋,题意看错-看了挑战时被标记的点还是给出的点,瞎搞了半个多小时... = =都想气的扔进水题系列了 #include <iostream> #include <cstdio> ...