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

提高可扩展性

目录
相关文章
|
26天前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
17天前
|
消息中间件 监控 Java
解锁Spring Cloud微服务架构的奥秘:深度剖析拆分原则,打造高内聚低耦合的业务创新引擎!
【8月更文挑战第3天】踏入微服务领域,Spring Cloud以丰富组件助力高效系统构建。微服务拆分需遵循原则确保系统高内聚低耦合且能适应变化。首要原则为单一职责,每个服务专注一个业务功能,降低复杂度并提高可维护性。其次,追求高内聚低耦合以减少服务间影响。围绕业务域拆分有助于保持逻辑清晰及团队协作。处理数据一致性问题时,考虑采用最终一致性模型。Spring Cloud提供Eureka、Zuul/Gateway、Sleuth和Config等工具支持服务发现、路由、跟踪及配置管理,共同构建灵活健壮的微服务架构。
33 2
|
25天前
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
12天前
|
边缘计算 Kubernetes 持续交付
构建高效后端系统:面向未来的架构设计原则
【8月更文挑战第8天】在技术飞速发展的今天,后端系统的架构设计显得尤为关键。本文将探讨如何通过采用微服务、容器化及自动化等现代技术手段,来构建一个可扩展、高可用且易于维护的后端系统。我们将深入分析这些技术背后的原理及其在实际场景中的应用,同时也会讨论如何在保障数据一致性和系统安全性的前提下,提升系统的响应速度和处理能力。
|
1月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
30天前
|
搜索推荐
业务系统架构实践问题之有效地实现“域间不可见”原则问题如何解决
业务系统架构实践问题之有效地实现“域间不可见”原则问题如何解决
|
2月前
|
JSON 前端开发 Java
Springboot mvc开发之Rest风格及RESTful简化开发案例
Springboot mvc开发之Rest风格及RESTful简化开发案例
33 2
|
2月前
|
安全 Java API
Java一分钟之-Spring Data REST:创建RESTful服务
【6月更文挑战第15天】Spring Data REST让基于Spring Data的项目轻松创建REST API,免去大量控制器代码。通过自动HTTP映射和链接生成,简化CRUD操作。文章涵盖启用REST、配置仓库、自定义端点、解决过度暴露、缺失逻辑和安全性问题,提供代码示例,如自定义Repository、投影和安全配置,强调在利用其便利性时注意潜在挑战。
43 5
|
1月前
|
监控 Java API
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
48 0
|
网络架构