这一篇主要是看了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. iOS webView的常见属性和方法

    一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)load ...

  2. vue开发购物车,解决全选单选问题

    实现全选单选,在vue中无法通过this获取input中的checkbox的checked属性,但是可以通过vue对input的特殊方式v-model来实现对应数据的绑定,同样也可以通过这种方式实现购 ...

  3. eclipse新建安卓项目helloworld

    第一步:安装JDK. 第二步:配置Windows上JDK的变量环境 . 第三步: 下载安装Eclipse . 第四步:下载安装Android SDK (下载Android SDK Manager工具, ...

  4. 一步一步学Silverlight 2系列(14):数据与通信之WCF

    一步一步学Silverlight 2系列(14):数据与通信之WCF   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框 ...

  5. 设置Tomcat的jvm内存问题

    tomcat的jvm大小设置与操作系统以及jdk有关:具体来说: 1.操作系统是32bit的,程序最大内存访问空间是4G, 2的32次方,这是硬件决定的,跟windows linux没有任何关系. 2 ...

  6. 接口_简单get接口_第一个接口

    import flask,json # print(__name__) ##__name__代表当前这个python文件 server = flask.Flask(__name__) #把咱们当前的这 ...

  7. mysql负载均衡方案

    mysql负载均衡方案 一.直接连接 数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案. 比较常见的读写分离方案如下: 1 基于查询分离 最简单的分离方法是将读和写分发到主和从服务 ...

  8. Collection View Programming Guide for iOS---(七)---Custom Layouts: A Worked Example

    Custom Layouts: A Worked Example Creating a custom collection view layout is simple with straightfor ...

  9. vmstat命令的使用

    vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程.内存.I/O等系统整体运行状态. 语法 vmstat(选项)(参数) 选项 -a:显 ...

  10. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时7

    课时7 线性分类器损失函数与最优化(下) 我们为什么要最大化对数概率而非直接最大化概率? 你在做逻辑斯蒂回归时,如果你只是想要最大化概率,那你使用log是无意义的.因为log函数是单调函数,最大化概率 ...