rest api学习笔记


REST的意思是表征状态转移(Representational State Transfer),它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的服务。其中包括了一下8种方法:

GET: 请求获取指定资源

POST: 向指定资源提交数据

PUT: 请求服务器存储一个资源

HEAD: 获取资源的响应头

DELETE: 请求服务器删除指定资源

TRACE: 回显服务器收到的请求用于诊断调试

CONNECT: 设置连接方式、代理服务器等

OPTIONS: 返回服务器支持的HTTP请求方法

其中常用的几种就是POST/DELETE/PUT/GET,达到增删改查的效果。REST模式的Web应用和服务较SOAP和XML-RPC来说更加简洁明了,但同时也会对安全性提出更高的要求。这里有两个概念:安全,幂等。安全是指没有副作用,连续访问多次所获得的结果不受访问者影响。而幂等指的是重复请求多次与一次请求效果是一样的。在四中常用的操作中,GET是非安全的,其他三个都是安全无副作用的;POST是非幂等的,其他三个都是幂等的。

设计REST的人认为:良好的网络应用表现为一系列的网页,可以看作一个个的虚拟状态机,用户选择这些链接导致下一个网页传输到用户终端呈现给用户,所以REST服务核心思想是状态的改变。

值得提醒的是: REST是设计的风格而不是标准,REST通常基于使用HTTP、URI、XML、HTML这些现有广泛流行的协议和标准。

资源由URI来指定 对资源的操作包括获取、修改、创建和删除 通过操作资源的表现形式来提供服务 资源的表现形式是XML或者HTML取决于读者是机器还是人,是消费Web服务的客户端软件还是浏览器,或者其他什么的

RESTful Web服务也称为RESTful Web API,是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:

URI Web服务接受与返回的互联网媒体类型,比如Json, XML, YAML等 Web服务在资源上锁支持的一系列请求方法,比如POST, GET, DELETE 和 PUT 说了这么多,到底为什么要用REST这种设计风格呢,好处如下:

可以充分利用缓存cache来提高响应速度 通讯本身的无状态可以让不同的服务器的处理所有类型的请求,提供了服务器的扩展性 浏览器就可以充当客户端,简化软件需求 相对于其他叠加在HTTP协议只上的极致,REST依赖性更小 不需要额外的资源发现机制 在软件技术演进中长期来看具有良好的兼容性

Node JS开发中常用到的一个模块叫Express,它支持REST风格的请求方式。Express对每种HTTP请求都设计了不同的路由绑定函数。包括了:

GET: app.get(path, callback)

POST: app.post(path, callback)

PUT: app.put(path, callback)

DELETE: app.delete(path, callback)

PATCH: app.patch(path, callback) - 新增HTTP方法,功能是定义部分更新某个资源

TRACE: app.trace(path, callback)

CONNECT: app.connect(path, callback)

OPTIONS: app.options(path, callback)

ALL: app.all(path, callback)

笔者觉得REST这种设计风格比较适应当下错综复杂的互联网时代,多样化的用户终端(浏览器、iPad、手机甚至任何软件本身)正好能发挥REST简洁、兼容的巨大优势。同时对于研发团队而言,瞬息万变的需求也非常适用于REST思想,因为它能大大降低研发的复杂性,提高整个系统的伸缩性。“通过URL来设计系统结构” 这句话就是对REST的一种很直白的解释。对研发团队中的测试人员来说,这也是大大提高系统可测性和简化测试门槛的一种手段。试想一下,每一个URL对应一个resource,代表一种表现形式,那么每种表现形式,都可以顺利成章的设计成test case,实施TDD(测试驱动开发)就会变得简单而轻松愉快,因为当系统设计好之后,test case就能很自然地产生,哪怕一个功能都还没有实现。所以笔者认为REST的思想,与TDD其实是不谋而合的,通过抽象URL来设计系统,正如通过test case来设计代码一样!


上篇: 写在2015春节前 下篇: 静态代码分析