REST原则、RESTful架构

简介: REST原则、RESTful架构

REST原则

REST(Representational State Transfer 表现层状态转化)即通过客户端/服务器模式,使用URL定位资源,使用HTTP协议对资源进行增删改查操作。

HTTP协议中的四种操作

  • get ——获取资源
  • post ——新建资源(也可以用于更新资源)
  • put ——更新资源
  • delete ——删除资源

资源 —— 网络上的一个具体信息

"表现层"(Representation)—— 资源具体呈现出来的形式,如文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现。

HTTP协议,是一个无状态协议,所有的状态都保存在服务器端

客户端想要操作服务器,只能使用HTTP协议让服务器端发生"状态转化"(State Transfer),这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

get —— 小明在浏览器地址栏中输入 http://www.youtube.com/kobehighlight ,客户端(小明的电脑)便通过互联网找到http://www.youtube.com的服务器,然后服务器根据kobehighlight在数据库里找到了科比的视频, 并把视频数据通过互联网传回给了小明的客户端。

post——小明通过浏览器剪掉科比视频中广告的部分,点击”提交“,服务器接到这个请求之后把修改后的视频保存到数据库中,并告诉小明修改已保存。

RESTful架构

符合REST原则的架构,即RESTful架构

  1. 每一个URI代表一种资源;
  2. 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"

RESTful API(REST风格的网络接口)的设计风格

  • URL中只使用名词来指定资源,原则上不使用动词,且推荐用复数
  • 使用 - 而不是使用 _ 做URL路径中字符串连接
  • url中大小写不敏感,不要出现大写字母
  • 用HTTP协议里的动词来实现资源的添加,修改,删除等操作
  • 使用JSON格式传输数据(不使用XML)
  • 用 HTTP Status Code传递Server的状态信息,在REST中都有特定的意义。比如最常用的 200 表示成功,500 表示Server内部错误等。

错误的api设计范例:

http://api.qc.com/v1/deleteFriend  ——  使用了动词

RESTful API 与 非RESTful API的对比

  • 非RESTful API,在url中描述行为  ——  /get_user?id=3
  • RESTful API,行为定义在HTTP协议请求头的请求方法中,url中只使用名词,不使用动词 —— GET方法   /user/3

为什么要用RESTful架构?

因为RESTful架构有以下优点:

1. 客户端服务器分离

提高用户界面的便携性(操作简单

通过简化服务器提高可伸缩性(高性能,低成本)

允许组件分别优化(可以让服务端和客户端分别进行改进和优化)

 

2. 无状态(Stateless)

从客户端的每个请求要包含服务器所需要的所有信息

提高可见性(可以单独考虑每个请求)

提高了可靠性(更容易从局部故障中修复)

提高可扩展性(降低了服务器资源使用)

3. 缓存(Cachable)

服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的信息发送请求。

利于减少交互次数,减少交互的平均延迟

 

4. 分层系统(Layered System)

系统组件不需要知道与他交流组件之外的事情。封装服务,引入中间层。

优点:

  • 限制了系统的复杂性
  • 提高可扩展性

 

5. 统一接口(Uniform Interface)

优点:

  • 提高交互的可见性
  • 鼓励单独改善组件

 

6. 支持按需代码(Code-On-Demand 可选)

提高可扩展性

目录
相关文章
|
23天前
|
缓存 监控 API
微服务架构下RESTful风格api实践中,我为何抛弃了路由参数 - 用简单设计来提速
本文探讨了 RESTful API 设计中的两种路径方案:动态路径和固定路径。动态路径通过路径参数实现资源的 CRUD 操作,而固定路径则通过查询参数和不同的 HTTP 方法实现相同功能。固定路径设计提高了安全性、路由匹配速度和 API 的可维护性,但也可能增加 URL 长度并降低表达灵活性。通过对比测试,固定路径在性能上表现更优,适合微服务架构下的 API 设计。
|
2月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
74 2
|
3月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
4月前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
3月前
|
XML API 网络架构
API架构风格对比:SOAP vs REST vs GraphQL vs RPC
API架构风格对比:SOAP vs REST vs GraphQL vs RPC
69 2
|
3月前
|
消息中间件 监控 Java
解锁Spring Cloud微服务架构的奥秘:深度剖析拆分原则,打造高内聚低耦合的业务创新引擎!
【8月更文挑战第3天】踏入微服务领域,Spring Cloud以丰富组件助力高效系统构建。微服务拆分需遵循原则确保系统高内聚低耦合且能适应变化。首要原则为单一职责,每个服务专注一个业务功能,降低复杂度并提高可维护性。其次,追求高内聚低耦合以减少服务间影响。围绕业务域拆分有助于保持逻辑清晰及团队协作。处理数据一致性问题时,考虑采用最终一致性模型。Spring Cloud提供Eureka、Zuul/Gateway、Sleuth和Config等工具支持服务发现、路由、跟踪及配置管理,共同构建灵活健壮的微服务架构。
75 2
|
3月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
38 0
|
4月前
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
4月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
3月前
|
边缘计算 Kubernetes 持续交付
构建高效后端系统:面向未来的架构设计原则
【8月更文挑战第8天】在技术飞速发展的今天,后端系统的架构设计显得尤为关键。本文将探讨如何通过采用微服务、容器化及自动化等现代技术手段,来构建一个可扩展、高可用且易于维护的后端系统。我们将深入分析这些技术背后的原理及其在实际场景中的应用,同时也会讨论如何在保障数据一致性和系统安全性的前提下,提升系统的响应速度和处理能力。