初见微服务之RESTful API

本贴最后更新于 3278 天前,其中的信息可能已经时异事殊
  1. 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 的,它活在计算机构建的这一社会的血液里、空气里。

  2. 什么是 REST?http://www.fhadmin.org

    需要注意的是 REST 并不是一个标准或者协议,而是一种设计风格,或者说是一个设计 web 服务的最佳实践,其要点如下:

    1. 面向资源的 URI 设计,如 user/register;

    2. 对资源的操作包括增、删、改、查(和数据库层的操作极为相似);

    3. 连接具有无状态性,即每一次的响应只依赖于这一次的请求;

    4. 利用 HTTP 协议实现以上的设计思想。

    非 RESTful 的设计示意图如下:

    image

    RESTful 的设计示意图如下:

    image

  3. REST 设计

    REST 的设计利用了 HTTP 协议的请求 option,如 GET、POST、PUT、DELETE。设计的简单示意图如下:

    REST 设计

    我工作过程中的一些最佳实践是:

    1. 对 option 的选择不应过多,不应死板教条,常用的有 GET、POST 即可;

    2. URI 的设计应已名词为主、动词为辅,层次清晰;

    3. 参数的设计应已单词为主,少用多个词的驼峰连接形式;

    4. 功能与 URI 或者参数设计冲突时,应以功能实现为主。

  4. REST 的劣势

    a. 一千个读者,一千个哈姆雷特,在设计评审粗糙的情况下,面向资源的 URI 设计五花八门;

    b. URI 泛滥,版本管理困难;

    c. HTTP option 使用不当;

    d. REST API 参数、返回值设计不当;

  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 8 关注
  • URI
    3 引用 • 4 回帖
  • HTTP
    75 引用 • 128 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zonghua

    使用驼峰连接?不是 url 的话都是建议连字符连接吗

  • 其他回帖
  • crick77

    url 和参数 到底应该是 驼峰 还是下划线"_"

  • 88250 1

    @zonghua 他是说少用....

  • zonghua 1

    @88250 。。。

推荐标签 标签

  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 3 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 827 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 609 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3196 引用 • 8215 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    410 引用 • 3588 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 10 关注
  • Outlook
    1 引用 • 5 回帖 • 1 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 543 关注
  • Excel
    31 引用 • 28 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 636 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 645 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 58 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 165 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 194 关注
  • sts
    2 引用 • 2 回帖 • 228 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 222 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 133 关注