-
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 参数、返回值设计不当;
近期热议
推荐标签 标签
-
知乎
10 引用 • 66 回帖
知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。
-
frp
17 引用 • 7 回帖
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。
-
面试
326 引用 • 1395 回帖 • 1 关注
面试造航母,上班拧螺丝。多面试,少加班。
-
架构
142 引用 • 442 回帖
我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。
-
webpack
42 引用 • 130 回帖 • 252 关注
webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。
-
Swagger
26 引用 • 35 回帖 • 2 关注
Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。
-
创业
82 引用 • 1395 回帖
你比 99% 的人都优秀么?
-
RIP
8 引用 • 92 回帖 • 406 关注
愿逝者安息!
-
Vim
29 引用 • 66 回帖 • 2 关注
Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。
-
Openfire
6 引用 • 7 回帖 • 119 关注
Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。
-
数据库
345 引用 • 754 回帖
据说 99% 的性能瓶颈都在数据库。
-
Outlook
1 引用 • 5 回帖 • 5 关注
-
WiFiDog
1 引用 • 7 回帖 • 614 关注
WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。
-
Word
13 引用 • 41 回帖 • 1 关注
-
Notion
10 引用 • 77 回帖
Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.
-
Postman
4 引用 • 3 回帖 • 2 关注
Postman 是一款简单好用的 HTTP API 调试工具。
-
JVM
180 引用 • 120 回帖 • 2 关注
JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。
-
单点登录
9 引用 • 25 回帖 • 4 关注
单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
-
OneDrive
2 引用 • 4 关注
-
锤子科技
4 引用 • 31 回帖 • 2 关注
锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。
-
Pipe
134 引用 • 1127 回帖 • 109 关注
Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。
这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
-
叶归
12 引用 • 56 回帖 • 21 关注
-
IBM
17 引用 • 53 回帖 • 144 关注
IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。
-
C++
108 引用 • 153 回帖 • 2 关注
C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。
-
Mac
167 引用 • 597 回帖 • 1 关注
Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。
-
PWL
1 引用 • 487 回帖 • 2 关注
组织简介
用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖。
用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/用爱发电组织的核心驱动力:
- 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
- 自我保护:使用适当的 License 保护自己的原创作品。
- 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
- 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
- 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
- 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
- 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
-
OkHttp
16 引用 • 6 回帖 • 94 关注
OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于