-
REST 名称由来
REST 全称为 Representational State Transfer,即表述性状态转移,最早由 Roy Feilding 博士在世纪之交(2000 年)提出,喜欢追根溯源的朋友可以读一下他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》,这时距 HTTP1.1 协议标准正式发布(1999 年 6 月)仅一年的时间。
岁月的痕迹跨越了十多年,技术的进步日新月异,所有的人都在谈论着应用容器化、服务解耦、DevOps 开发运维文化等等。我们变得喜新厌旧,技术成了快餐,框架是越来越多的舶来品。此时,我们是否应该静一静,看看技术的起源,想想我们如何成为软件的设计师,而不是代码的奴隶、资本的工具?REST 作为历史的宝藏,被越来越多的人挖掘、归纳、推陈出新,近几年占领了几乎所有的大型互联网公司的开放 API,国外如 google(https://developers.google.com/apis-explorer)、facebook,国内的有豆瓣、腾讯的公众平台等。
在这里,我要替 SOAP 说几句话,技术的进步始终是从无到有,由繁入简的。在一定的时间里 SOAP 满足了 web 服务的设计要求,达到了对外提供服务的目的,尽管十分的(协议)晦涩、(解析)生硬。企业级的软件依然有很多保留着 SOAP 式的服务,我工作过程中对接的一些政府如卫生计划委员会、医疗 HIS 系统其实依然是保有 SOAP 的,它活在计算机构建的这一社会的血液里、空气里。
-
什么是 REST?http://www.fhadmin.org
需要注意的是 REST 并不是一个标准或者协议,而是一种设计风格,或者说是一个设计 web 服务的最佳实践,其要点如下:
-
面向资源的 URI 设计,如 user/register;
-
对资源的操作包括增、删、改、查(和数据库层的操作极为相似);
-
连接具有无状态性,即每一次的响应只依赖于这一次的请求;
-
利用 HTTP 协议实现以上的设计思想。
非 RESTful 的设计示意图如下:
image
RESTful 的设计示意图如下:
image
-
-
REST 设计
REST 的设计利用了 HTTP 协议的请求 option,如 GET、POST、PUT、DELETE。设计的简单示意图如下:
REST 设计
我工作过程中的一些最佳实践是:
-
对 option 的选择不应过多,不应死板教条,常用的有 GET、POST 即可;
-
URI 的设计应已名词为主、动词为辅,层次清晰;
-
参数的设计应已单词为主,少用多个词的驼峰连接形式;
-
功能与 URI 或者参数设计冲突时,应以功能实现为主。
-
-
REST 的劣势
a. 一千个读者,一千个哈姆雷特,在设计评审粗糙的情况下,面向资源的 URI 设计五花八门;
b. URI 泛滥,版本管理困难;
c. HTTP option 使用不当;
d. REST API 参数、返回值设计不当;
近期热议
推荐标签 标签
-
Firefox
8 引用 • 30 回帖 • 420 关注
Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。
-
CodeMirror
1 引用 • 2 回帖 • 130 关注
-
React
192 引用 • 291 回帖 • 413 关注
React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。
-
NetBeans
78 引用 • 102 回帖 • 663 关注
NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。
-
链滴
150 引用 • 3774 回帖
链滴是一个记录生活的地方。
记录生活,连接点滴
-
心情
59 引用 • 369 回帖 • 1 关注
心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。
-
flomo
5 引用 • 103 回帖 • 2 关注
flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。
-
Jenkins
52 引用 • 37 回帖 • 1 关注
Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。
-
安全
200 引用 • 816 回帖
安全永远都不是一个小问题。
-
996
13 引用 • 200 回帖 • 1 关注
-
人工智能
129 引用 • 171 回帖
人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。
-
Rust
58 引用 • 22 回帖 • 5 关注
Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。
-
开源
406 引用 • 3569 回帖
Open Source, Open Mind, Open Sight, Open Future!
-
Hexo
21 引用 • 140 回帖 • 4 关注
Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。
-
阿里巴巴
43 引用 • 221 回帖 • 155 关注
阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。
-
快应用
15 引用 • 127 回帖 • 1 关注
快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。
-
WebComponents
1 引用 • 1 关注
Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。
-
Markdown
167 引用 • 1493 回帖 • 1 关注
Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。
-
Scala
13 引用 • 11 回帖 • 117 关注
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
-
LeetCode
209 引用 • 72 回帖
LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!
- BND
-
ZeroNet
1 引用 • 21 回帖 • 627 关注
ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。
-
Netty
49 引用 • 33 回帖 • 28 关注
Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。
-
sts
2 引用 • 2 回帖 • 185 关注
-
GitBook
3 引用 • 8 回帖 • 1 关注
GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。
-
Chrome
62 引用 • 289 回帖
Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
-
Sphinx
1 引用 • 199 关注
Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于