这一篇主要是看了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风格笔记
时间: 2024-10-10 06:22:36
REST风格笔记的相关文章
编写可维护的js代码-编程风格笔记
1.基本格式化 缩进层级:4个空格(把tab设成4个空格) 语句结尾:保留;(虽然分析器有自动分号插入机制) 行的长度:80个字符 空行:确保语义有关联的代码展现在一起 命名:变量和函数遵循小驼峰命名法,小写字母开始,后面每个单词首字母大写 变量命名前缀名词myName 函数命名前缀动词setName() 常量MAX_COUNT大写字母和下划线 构造函数大驼峰命名法AnotherName 直接量: 字符串:推荐" ",虽然和' '一样 整数和浮点数:8进制废弃 null:空对象指针 初
Web Service笔记(五):CXF开发RESTful风格的Web Service
前言: 1.Web Service笔记(五):利用CXF结合Spring开发web service 2.XML学习笔记(三):Jaxb负责xml与javaBean映射 3.jax-rs详解 4.可以使用浏览器的工具调试:如 Firefox 的RESTClient 和chrome的REST Console. 一.配置Spring的配置文件 1.需要引入新的 jar 包. 2.配置 applicationContext-server.xml 文件.使用 jaxrs:server ,记得引入jaxrs
《Essential C++》读书笔记 之 面向过程编程风格
<Essential C++>读书笔记 之 面向过程编程风格 2014-06-18 2.2 调用(invoking)一个函数 2.2.1 Pass by Reference语义 reference扮演这外界与对象之间的一个间接号码牌的角色.只要在性别名称和reference名称之间插入&符号,便声明了一个reference: 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int ival=
《Essential C++》读书笔记 之 基于对象编程风格
<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructors(析构函数) 4.3 何谓mutable(可变)和const(不变) 4.4 什么是this指针 4.5 Static Class Member(静态的类成员) 4.6 打造一个Iterator Class 4.7 合作关系必须建立在友谊的基础上 4.8 实现一个copy assignment operat
Android网络项目课程笔记-----系统设置_首选项框架&;Holo风格的设置
系统设置_首选项框架 步骤: 1) 新建Android XML 2) 修改Activity 继承PreferenceActivity 在onCreate() 方法中调用 addPreferencesFromResource(R.xml.settings); 如何在Android2.x版本中实现Holo风格的设置 使用HoloEveryWhere 2.1+ 提示:使用supportV7 使用步骤: 1) 拷贝Demo中的DemoAppliaction,并在清单中配置 根据编译报错,拷贝valu
Lua学习笔记(2) —— 风格
前一篇大概学习了lua常用的语法,都是些刚入门时应该了解的.见这里 Lua学习笔记(1) ——语法 这篇主要记录一些关于lua代码风格的经验,如果不了解它们,还是拿着函数式或传统面向对象的风格去写lua,就永远无法了解lua的精华之所在,弃之所长,取其所短. 1. 函数类型的变量 2. 匿名函数 3. 闭包 4. 表 5. 协程 6. 虚拟机
《Essential C++》读书笔记 之 泛型编程风格
<Essential C++>读书笔记 之 泛型编程风格 2014-07-07 Standard Template Library(STL)主要由两种组件构成: 一室容器(container),包括vector,list,set,map等类: 另一种是用以操作这些容器类的所谓泛型算法(generic algorithm),包括find(),sort(),replace(),merge()等等. <Essential C++>读书笔记 之 泛型编程风格
【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html
概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/getUserXML 这样做不符合Restful的原则,1个资源相当于变成了两个资源: 2. 对同一资源的CRUD操作 不推荐的做法: /user/addUser/ /user/getUser/123 /user/deleteUser/123 /user/updateUser/123 这样做也不符合Res
奇舞js笔记——第2课——代码风格
注: 1.学习视频地址 2.ppt地址 3.个人感想: 是我hin厉害的师父推荐我看的月影大大的视频,感觉对于我这个小白来说,真的是一遍又一遍的刷新知识面.我觉得像月影大大这种大佬的思路,我接触之后真的是受益匪浅. 所以我总结出来不仅是自己记笔记,也是想分享给想要成为真正的前端“工程师”的前端er. 真的很珍惜这种知识面被刷新的感觉——越学习,越感到自己无知,共勉. 目录 1.代码风格存在的意义 2.代码风格是什么 3.遵守怎样的代码风格 4.怎样学习代码风格 5.一些特殊的代码风格:IIFE,