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 可选)

提高可扩展性

目录
相关文章
|
10天前
|
JSON 前端开发 Java
Springboot mvc开发之Rest风格及RESTful简化开发案例
Springboot mvc开发之Rest风格及RESTful简化开发案例
16 2
|
18天前
|
安全 Java API
Java一分钟之-Spring Data REST:创建RESTful服务
【6月更文挑战第15天】Spring Data REST让基于Spring Data的项目轻松创建REST API,免去大量控制器代码。通过自动HTTP映射和链接生成,简化CRUD操作。文章涵盖启用REST、配置仓库、自定义端点、解决过度暴露、缺失逻辑和安全性问题,提供代码示例,如自定义Repository、投影和安全配置,强调在利用其便利性时注意潜在挑战。
28 5
|
2月前
|
JSON 网络架构 数据格式
SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发
SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发
41 2
|
2月前
|
Web App开发 JavaScript Cloud Native
构建高效可扩展的RESTful API:Node.js与Express框架实践指南构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第29天】 在数字化时代的驱动下,后端服务架构的稳定性与效率成为企业竞争力的关键。本文深入探讨了如何利用Node.js结合Express框架构建一个高效且可扩展的RESTful API。我们将从设计理念、核心模块、中间件应用以及性能优化等方面进行系统性阐述。通过实例引导读者理解RESTful接口设计的最佳实践,并展示如何应对大规模并发请求的挑战,确保系统的高可用性与安全性。
|
2月前
|
敏捷开发 监控 测试技术
软件架构的艺术:探索演化之路上的18大黄金原则
实际工作表明,一步到位的设计往往不切实际,而演化原则指导我们逐步优化架构,以灵活响应业务和技术的变化。这不仅降低了技术债务和重构风险,还确保了软件的稳定性和可扩展性。同时,架构的持续演进促进了团队协作,激发了成员间的知识共享与技能提升。
软件架构的艺术:探索演化之路上的18大黄金原则
|
2月前
|
存储 网络协议 数据库
数据中心网络架构的需求原则及策略
【5月更文挑战第15天】本文讨论了数据中心建设的重要性,它能提升用户体验,保证业务连续性和数据安全。
|
2月前
|
存储 缓存 运维
云计算架构设计原则
【4月更文挑战第6天】这篇文章介绍了基于云计算的架构设计六大原则:合理部署、业务持续、弹性扩展、性能效率、安全合规和持续运营。
|
2月前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
网络架构
|
网络架构
理解RESTful架构
【本文转载自理解RESTful架构】 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间
1368 0