这一篇主要是看了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. Python小练习_数据库表数据导出到excel

    需求:只要传入一个表名,就能把所有的数据导入出来,字段名是excel的表头 1.要动态获取到标的字段 cur.descrption能获取到表的字段 fileds = [filed[0] for fil ...

  2. hdu 4763 Theme Section(next数组找串中三段相等)

    题意:在一个串中找 EAEBE 的形式的最长的E,其中E为一个字符串,也就是说找到前缀与后缀相同,并且串中还存在相同的一段,它们不能重复. 思路:利用next数组,next[len]代表的即是最大的相 ...

  3. Android中的Handler,以及用Handler延迟执行

    项目中遇到一个情况,先生成文件再上传:但有时候发出指令后上传会不成功,需要再发一次指令方能上传. 猜想是由于文件还没生成就执行「上传」指令了.想到要延时.Android中单纯用currentThrea ...

  4. QTextEdit/QPlainTextEdit添加文字超出视图后,滚动条自动移至最底部

    void ThreadExit::onTaskPerformState(const QString& strStatus) { //追加文本(ui.taskStatusTextEdit是一个Q ...

  5. DDK编写64位驱动时加入x64汇编的方法

    上篇讲了如何在编写x64应用程序时加入x64汇编,这里来说说如何在编写x64驱动时加入x64汇编. 一.在asm文件中单独编写功能函数 比如要实现一个64位的加法函数,原型如下: ULONG64 my ...

  6. ML 徒手系列说明

    徒手系列正确打开方式: 1.徒手撸公式 2.徒手撸代码

  7. wcf中事务的操作

    using System; using System.ServiceModel; namespace Larryle.Wcf.ServiceContract.Transaction { [Servic ...

  8. ORA-01843: not a valid month 错误

    转自:https://blog.csdn.net/jetluning/article/details/48785599 insert into ......的场合发生ORA-01843: not a ...

  9. ios::sync_with_stdio(false);

    取消cin与stdin的同步,加快输入速度

  10. 折半插入排序 之通俗易懂,图文+代码详解-java编程

    转自http://blog.csdn.net/nzfxx/article/details/51615439 1.特点及概念介绍 下面给大家讲解一下"二分法查找"这个java基础查找 ...