-
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 参数、返回值设计不当;
近期热议
推荐标签 标签
-
996
13 引用 • 200 回帖 • 11 关注
-
Q&A
8447 引用 • 38477 回帖 • 154 关注
提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。
-
danl
• 146 关注
-
笔记
308 引用 • 793 回帖
好记性不如烂笔头。
-
禅道
5 引用 • 15 回帖 • 102 关注
禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。
-
V2Ray
1 引用 • 15 回帖 • 1 关注
-
SpaceVim
3 引用 • 31 回帖 • 105 关注
SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
即用的 Vim-IDE。 -
安装
132 引用 • 1184 回帖 • 1 关注
你若安好,便是晴天。
-
Git
209 引用 • 358 回帖 • 1 关注
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
-
爬虫
106 引用 • 275 回帖 • 1 关注
网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。
-
Sandbox
409 引用 • 1246 回帖 • 587 关注
如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。
-
Ubuntu
126 引用 • 169 回帖
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。
-
JavaScript
728 引用 • 1273 回帖 • 1 关注
JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。
-
面试
325 引用 • 1395 回帖 • 1 关注
面试造航母,上班拧螺丝。多面试,少加班。
-
Notion
7 引用 • 40 回帖
Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.
-
TensorFlow
20 引用 • 19 回帖 • 1 关注
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
-
创造
178 引用 • 997 回帖
你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!
-
Latke
71 引用 • 535 回帖 • 789 关注
Latke 是一款以 JSON 为主的 Java Web 框架。
-
酷鸟浏览器
3 引用 • 59 回帖 • 26 关注
安全 · 稳定 · 快速
为跨境从业人员提供专业的跨境浏览器 -
七牛云
27 引用 • 225 回帖 • 163 关注
七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。
-
新人
52 引用 • 228 回帖
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶! -
Markdown
167 引用 • 1520 回帖
Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。
-
ZooKeeper
59 引用 • 29 回帖 • 14 关注
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
-
Webswing
1 引用 • 15 回帖 • 637 关注
Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用 。
-
Sillot
汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。
主仓库地址:Hi-Windom/Sillot
文档地址:sillot.db.sc.cn
注意事项:
- ⚠️ 汐洛仍在早期开发阶段,尚不稳定
- ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
- ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
-
InfluxDB
2 引用 • 76 关注
InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。
-
VirtualBox
10 引用 • 2 回帖
VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于