[架构之路-260]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 基于Web的软件架构(REST与RESTful)

news2024/11/17 22:22:51

目录

一、基于Web的软件架构

1.1 什么是基于Web的软件架构

1.2 基于Web的软件架构的发展历史

1.3 基于Web的软件架构的优点

1.4 基于Web的软件架构的示例

1.5 基于Web的软件架构的协议标准

1.6 基于Web的软件架构

二、REST与RESTful

2.1 概述

2.2 RESTful协议

2.3 REST API

三、关键词的区别

3.1 Web:扩展性 VS 微服务:可伸缩性

3.2 Web:可定制性 VS 微服务:灵活性


一、基于Web的软件架构

1.1 什么是基于Web的软件架构

基于Web的软件架构是一种通过Web技术和协议来构建和交互软件系统的架构风格。它将分布式计算和互联网的概念应用于软件设计和开发。基于Web的软件架构通常遵循客户端-服务器模型,其中客户端通过Web浏览器或其他HTTP客户端与服务器进行通信。

基于Web的软件架构的关键特点和概念包括:

  1. 前后端分离:基于Web的软件架构倡导将用户界面(前端)和业务逻辑和数据处理(后端)分离。前端通常使用HTML、CSS和JavaScript等技术开发,后端则提供RESTful API或其他接口来处理数据和业务逻辑。

  2. 客户端-服务器通信:基于Web的架构使用 HTTP 协议作为客户端和服务器之间的通信协议。客户端发送请求,服务器返回响应。这种通信模式便于跨网络进行远程调用,并支持各种类型的客户端设备。

  3. 资源标识和访问:基于Web的架构通过统一资源定位器(URL)或统一资源标识符(URI)来标识和定位资源。客户端可以通过URL访问和操作服务器上的资源。

  4. RESTful API:基于Web的架构通常使用RESTful API来定义和公开服务器资源。REST(Representational State Transfer)是一种设计原则和约束,它通过使用标准的HTTP方法(如GET、POST、PUT、DELETE)和资源表征(如JSON或XML)来实现资源的管理和操作。

  5. 可扩展性和松耦合:基于Web的架构设计强调可扩展性和松耦合性。通过将不同功能和组件分离,可以更容易地添加新功能、扩展系统的规模,并支持分布式计算和部署。

基于Web的软件架构已经成为设计和开发现代应用程序的主流方法。它提供了灵活、可伸缩和易于扩展的方式来构建和交互复杂的软件系统,并支持跨平台和跨设备的访问和集成。

1.2 基于Web的软件架构的发展历史

基于Web的软件架构是一个相对较新的概念,其发展历史可以追溯到上世纪90年代末和本世纪初。以下是基于Web的软件架构发展历史的主要里程碑:

  1. CGI(公共网关接口):在上世纪90年代初期,CGI是一种常用的Web服务器扩展程序,它将Web服务器与外部程序(如Perl,C,C ++等)连接起来,允许服务器根据需要动态生成Web页面

  2. J2EE(Java 2企业版):J2EE是Sun Microsystems(现为Oracle)发布的一个企业级Java平台,它提供了一系列API和中间件服务,使开发者能够创建基于Web的分布式应用程序。

  3. AJAX(异步JavaScript和XML):AJAX是一种技术组合,它将JavaScript、XML和HTTP等技术结合在一起,使Web应用程序可以异步加载数据,从而获得更好的用户体验。

  4. Web服务:Web服务是一种基于Web的系统架构,它使用最新的标准和协议(如SOAP、WSDL和UDDI),使不同语言和平台之间的应用程序可以互相通信和交互。

  5. REST架构:REST(Representational State Transfer)是一种协议无关的架构风格,它将Web的基本特性(如HTTP和URI)用于构建分布式系统,提供更好的可靠性可扩展性和可重用性

  6. 现代Web框架:近年来,出现了许多支持现代Web开发的框架和库,如Node.js(用于构建服务器端JavaScript应用程序)、React(用于构建动态用户界面)和Angular(用于构建单页应用程序),这些工具大大简化了Web应用程序的开发和维护。

基于Web的软件架构不断地发展和演变,同时也得益于Web技术的快速发展和开放标准的不断完善。通过持续研究和开发,基于Web的软件架构将继续为我们提供更好、更灵活和更可靠的应用程序。

1.3 基于Web的软件架构的优点

基于Web的软件架构(Web-based software architecture)主要是指应用程序是通过Web技术进行开发和部署的软件,具有如下优点:

  1. 可跨平台性:Web应用程序可以在几乎所有的操作系统中运行,例如Windows、Linux和macOS等,因为它们只需要一个Web浏览器,而不需要安装应用程序本身。比如,电子商场,就不需要用户安装任何终端,通过IE就可以访问。方便了终端客户。

  2. 可定制性:Web应用程序可以非常容易地进行自定义和配置,这使得它们可以根据不同的业务需求进行必要的调整和修改,从而适应不同的用户需要

  3. 可扩展性:添加新功能和服务可以通过在服务器上添加新模块和插件来轻松扩展Web应用程序的能力,这让Web应用程序更容易满足日益增长的业务需求。

  4. 更容易维护和部署:由于Web应用程序是通过Web技术进行开发和部署的,所以它们更容易维护。例如,修复漏洞和更新应用程序只需要更新服务器上的Web页面即可,而不需要在每个终端设备上安装更新软件。

  5. 更好的可访问性:Web应用程序可以在任何有网络连接的地方访问,只需要一个Web浏览器,并且这些应用程序可以被多个用户同时访问,使得它们更加实用和无处不在。

总之,基于Web的软件架构是一种非常流行的软件架构,他们具有可靠性,可扩展性和易维护性等优点。

1.4 基于Web的软件架构的示例

以下是一些基于Web的软件架构的示例:

  1. 电子商务平台:例如电子商务网站,如亚马逊、eBay和淘宝等。这些平台提供在线购物、支付和订单管理等功能,用户可以通过Web浏览器在任何地方使用。

  2. 社交媒体平台:例如Facebook、Instagram和Twitter等社交媒体平台。它们提供用户注册、个人资料管理、发布内容、评论和互动等功能,用户可以通过Web浏览器随时随地使用。

  3. 在线银行系统:银行和金融机构的在线银行系统,如美国银行和花旗银行等。用户可以通过Web浏览器进行账户管理、转账、支付账单等操作。

  4. 项目管理工具:例如Trello和Jira等项目管理工具。它们提供任务跟踪、团队协作、进度管理等功能,用户可以通过Web浏览器进行项目管理。

  5. 在线学习平台:例如Coursera、Udemy和LinkedIn Learning等在线学习平台。它们提供课程学习、在线视频、作业提交等功能,学生可以通过Web浏览器参与学习。

  6. 在线会议工具:例如Zoom、Microsoft Teams和Google Meet等在线会议工具。它们提供远程会议、屏幕共享、聊天功能等,用户可以通过Web浏览器参与会议。

这些都是基于Web的软件架构的示例,它们利用Web技术实现了在不同领域的各种功能和服务的访问和使用。

1.5 基于Web的软件架构的协议标准

基于Web的软件架构依赖于一些协议标准来进行数据通信和应用程序的开发。以下是一些常见的基于Web的软件架构协议标准:

  1. HTTP(超文本传输协议):HTTP是Web请求和返回数据的标准协议。它是一个客户端-服务器协议,客户端通过Web浏览器发送请求并接收服务器的响应。

  2. HTML(超文本标记语言):HTML是一种用于构建Web页面的标记语言。它定义了页面的结构和内容,并使用各种标签和属性来实现

  3. CSS(层叠样式表):CSS是一种用于控制HTML页面外观和样式的样式表语言。它可以让Web页面变得更加美观和易于使用。

  4. JavaScript:JavaScript是一种适用于Web的脚本语言,它嵌入到HTML中并可以与用户交互。它可以通过Web浏览器解释和运行。

  5. JSON(JavaScript对象表示法):JSON是一种数据交换格式,由JavaScript创建。它通常用于Web应用程序和服务器之间的数据交换。

  6. XML(可扩展标记语言):XML是一种用于存储和传输数据的标记语言。它允许自定义标记和属性,并且常用于数据传输中。

总之,这些协议标准为基于Web的软件架构提供了强大的功能,允许开发人员根据业务需求构建应用程序和服务,并提供标准化的接口和通信机制。

1.6 基于Web的软件架构

基于Web的软件架构和微服务是两个相关但不完全相同的概念。它们可以一起使用,但也可以独立运作。

基于Web的软件架构是指将应用程序开发为基于Web技术的架构,通过Web浏览器与用户交互,并使用HTTP等协议与服务器通信。它强调应用程序的可访问性、跨平台性、可定制性和扩展性等优点。

微服务是一种架构风格,提倡将应用程序拆分为一系列小型、独立的服务,每个服务都专注于执行特定的业务功能。这些服务可以通过API调用进行通信,并可以使用不同的技术栈进行开发和部署。微服务的核心原则是单一职责和自治性

基于Web的软件架构和微服务可以结合使用。在基于Web的软件架构中,每个Web应用程序可以作为一个微服务的一部分,负责处理特定的功能和业务逻辑。每个Web应用程序可以作为独立的服务运行,并通过API调用与其他服务进行通信。

使用微服务架构可以带来一些优势,如松耦合、灵活性和可伸缩性等。通过将应用程序拆分为小型的服务,可以更容易地进行开发、测试和部署,也更容易根据需求进行水平扩展。

总之,基于Web的软件架构和微服务可以结合使用,通过将应用程序拆分为独立的服务,实现更好的可伸缩性和灵活性。它们共同为构建可靠、可维护的分布式系统提供了一种方式。

二、REST与RESTful

2.1 概述

REST(Representational State Transfer)是一种架构风格,它描述了在Web上设计和构建分布式系统的原则和约束。REST架构实际上是一组原则和约束,以便将分布式应用程序构建为基于Web的架构,这些应用程序使用统一资源标识符(URI)和标准HTTP方法进行通信。

而RESTful则是指符合REST架构原则应用程序或服务如果一个应用程序严格遵循了REST架构原则,它就可以被称为RESTful应用程序或RESTful服务。

因此,REST和RESTful的不同之处在于REST是一种架构风格的描述,是一组规则和原则的集合,而RESTful则是符合这些规则和原则的具体实现,是REST架构定义的一个参考实现的概念。

为了更好地理解这个概念,以下是一些REST与RESTful的比较:

  • REST是一种架构风格,而RESTful是一个实现这种风格的应用程序或服务。
  • REST是统一的资源接口,RESTful是一个Web服务的构建方式。
  • REST描述了基本原则和约束,RESTful则展示如何在实际的开发过程中应用这些原则和约束。
  • REST本身不一定需要使用HTTP协议,但RESTful则要求使用HTTP协议

总之,REST和RESTful是相关但不同的概念。REST定义了如何构建Web应用程序的基本原则和约束,而RESTful则是基于这些原则和约束实现的应用程序或服务。

2.2 RESTful协议

备注:

HTTP协议是TCP/IP标准协议,HTTP协议工作在应用程序。

REST协议是架构在HTTP协议之上,定义了使用HTTP协议传送客户端和服务器协议的标准方法。

2.3 REST API

REST API(Representational State Transfer Application Programming Interface)是一种基于REST原则的应用程序编程接口。它是通过使用HTTP协议中的不同方法(如GET、POST、PUT、DELETE等)来访问和操作资源的。

REST API通过URL(统一资源定位符)来标识和定位资源,使用HTTP方法来定义对资源的操作。使用REST API,客户端可以通过发送HTTP请求(如GET、POST、PUT、DELETE)来请求资源、创建、更新或删除资源。

REST API的设计原则包括:

  1. 使用普通的、无状态的HTTP方法:GET用于检索资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。
  2. 使用URL来标识和定位资源:每个资源通过一个唯一的URL来表示,可以通过URL的路径、查询参数或者其他标识符来定位特定的资源。
  3. 使用HTTP状态码来表示请求结果:REST API使用标准的HTTP状态码(如200 OK、201 Created、404 Not Found等)来表示请求的结果状态。
  4. 使用合适的数据格式传输数据:REST API通常使用JSON或XML等常见的数据格式来传输数据。
  5. 提供清晰的文档和API描述:REST API应该提供易于理解的文档和API描述,以帮助开发者正确地使用和集成该API。

通过使用REST API,开发者能够轻松地与不同的应用程序、服务或服务提供商进行集成和交互。REST API在互联网上非常常见,被广泛使用于各种类型的应用程序和服务,例如社交媒体平台、电子商务网站、移动应用程序等。

三、关键词的区别

3.1 Web:扩展性 VS 微服务:可伸缩性

Web架构和微服务架构对扩展性和可伸缩性的重视程度有所不同。

Web架构是一种将应用程序封装为标准的Web请求和HTTP协议的体系结构,从而实现跨平台和可访问性的目的。这种架构对于构建扩展性的应用程序尤为有利,因为通过增加Web服务器和负载均衡器等组件并进行横向扩展,可以方便地处理更多的请求,从而提高系统的可用性和性能。

另一方面,微服务架构将应用程序拆分成了一系列小型的服务,每个服务都尽可能地独立,可以使用不同的技术栈进行开发和部署。这种架构对于构建可伸缩性的应用程序尤为有利,因为每个服务都可以根据需要进行单独的扩展,而不会影响整个应用程序的可用性和性能。

扩展性和可伸缩性的概念关注的是架构的能力,使其能够扩展系统以应对不断增长的负载,以及在系统规模增大的情况下保持稳定。如果系统能够支持更多的并发用户和处理更多数据,那么就可以称之为具有良好的扩展性和可伸缩性。

总之,Web架构和微服务架构均重视应用程序的可扩展性,并通过不同的设计实现了不同的目标。Web架构将应用程序封装到标准的Web请求中,从而实现跨平台和可访问性的目的,微服务架构则将应用程序拆分为多个小型的服务实现可伸缩性和松耦合的目标。

3.2 Web:可定制性 VS 微服务:灵活性

Web架构和微服务架构的主要设计目标分别是可定制性和灵活性。

两种架构都在这两个方面具有不同的优势。

Web架构旨在开发具有高度可定制性的Web应用程序HTML、CSS、JavaScript等技术提供了各种定制选项从页面布局到用户界面、功能和性能等各个方面都可以进行定制。但是,在Web架构中,应用程序通常较为复杂,因为涉及处理请求、数据传输、渲染和用户体验等多个方面,这可能会使开发人员难以集中精力于一个特定的问题。

微服务架构则专注于灵活性,它将应用程序拆分成多个独立的服务每个服务专注于执行特定的功能和业务逻辑。由于每个服务都是独立的,(1)它们可以使用不同的技术栈进行开发和部署,这使得开发人员更容易根据需求进行选择和调整。此外,(2)微服务架构还具有良好的松耦合性和自治性,通过不同服务之间的API通信,每个服务都可以自主决定其内部操作细节,这样就能更好地管理和扩展应用程序。(3)可以通过灵活组合各种微服务获得更强大的功能!!

总之,Web架构和微服务架构都提供了具有独特特点的定制和灵活性方面的优势。

Web架构提供了各种定制选项,从页面布局到用户界面、功能和性能等各个方面都可以进行定制

而微服务架构则专注于灵活性,通过将应用程序拆分成多个独立的服务,每个服务都专注于执行特定的功能和业务逻辑,从而提高了整个应用程序的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自治调优!人大金仓解放DBA双手

数据库系统的性能是确保整个应用系统高效运转的关键因素,因此数据库性能调优工作至关重要。KingbaseES通过将人工调优过程内化为数据库内核,成功实现了自治调优。这种创新的调优方案为DBA提供了更高效且准确的性能调优途径,同时也显著降低了数…

【头歌系统数据库实验】实验5 SQL的多表查询-1

目录 第1关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表) 第2关:查询供应情况,并显示供应商、零件和工程三者的名称 第3关:找出上海厂商供应的所有零件号码 第4关:找出使用上海产的零…

ES 如何将国际标准时间格式进行格式化与调整时区

需求,日志收集的时候,时间格式是国际标准时间格式。形如yyyy-MM-ddTHH:mm:ss.SSS。 (2023-12-05T02:45:50.282Z)这个时区也不对,那如何将此类型的时间,进行格式化呢? 本篇文章体统一个案例&…

基于Python+Django+mysql图书管理系统

基于PythonDjangomysql图书管理系统 一、系统介绍二、功能展示三、其它系统四、获取源码 一、系统介绍 程序开发软件:Pycharm 数据库:mysql 采用技术: Django(一个MVT框架,类似Java的SSM框架) 人生苦短,我用Python&a…

Web服务安全架构——一、Web应用程序基础理论

Web安全架构 一、引言二、Web应用程序的生成过程三、程序员是如何开发Web应用程序的1、Web程序的分层结构2、各司其职的程序员3、研究 Web 应用程序的利器3.1 黑盒测试类工具3.2 白盒测试类工具 四、小结 一、引言 随着互联网的迅速发展,我们越来越多地使用Web应用…

【前端】CSS盒子模型(学习笔记)

一、盒子模型 1、网页布局的本质 先准备好相关的网页元素,网页元素基本都是盒子 Box 。利用 CSS 设置好盒子样式,然后摆放到相应位置。往盒子里面装内容. 网页布局的核心本质: 利用 CSS 摆盒子。 2、盒子模型 盒子模型:就是把 …

LangChain 25: SQL Agent通过自然语言查询数据库sqlite

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

随机分词与tokenizer(BPE->BBPE->Wordpiece->Unigram->sentencepiece->bytepiece)

0 tokenizer综述 根据不同的切分粒度可以把tokenizer分为: 基于词的切分,基于字的切分和基于subword的切分。 基于subword的切分是目前的主流切分方式。subword的切分包括: BPE(/BBPE), WordPiece 和 Unigram三种分词模型。其中WordPiece可以认为是一种特殊的BPE。完…

臻程密封科技(江苏)有限公司携橡胶密封产品亮相2024生物发酵展

臻程密封科技(江苏)有限公司盛装亮相2024第12届国际生物发酵产品与技术装备展(济南) 展位号:2号馆H56 臻程密封科技(江苏)有限公司专注于橡胶密封材料的研发,橡胶密封产品的生产、…

阿里云SLB的使用总结

一、什么是SLB 实现k8s的服务service的一种推荐方式,也是服务上云后,替代LVS的一个必选产品。 那么它有什么作用呢? 1、负载均衡,是它与生俱来的。可以配置多个服务器组:包括虚拟服务器组、默认服务器组、主备服务器…

来自OpenAI的官方解释:ChatGPT中的GPTs与Assistants API的区别是什么?有什么差异?

本文原文来自DataLearnerAI的官方网站: 来自OpenAI的官方解释:ChatGPT中的GPTs与Assistants API的区别是什么?有什么差异? | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701996595465 OpenAI发布的产…

大数据技术5:OLAP引擎对比分析

前言:数据仓库建设,初级的理解就是建表,将业务数据、日志数据、消息队列数据等,通过各种调度任务写入到表里供OLAP引擎使用。但要想建好数仓也是一个复杂、庞大的工程,比如要考虑:数据清洗、数据建模&#…

使用Vue3+Typescript手写一个日历签到组件

设计理念 昨天写了个简单美观的日历签到组件,使用的是Vue3TypeScript,大概逻辑是先找到本月份第一天是周几,然后开始填充月份日期:weeksArray:[[]]:之后渲染到表格中,对于签到事件触发则先判断是否是今天且还未没有签…

计算机视觉 基于Open3D了解用于网格和点云邻域分析的KD树和八叉树

一、简述 距离计算和邻域分析是理解网格和点云的形状、结构和特征的重要工具。我们这里要基于一些3D库来提取基于距离的信息并将其可视化。 与深度图或体素相比,点云和网格表示 3D 空间中的非结构化数据。点由它们的 (X, Y, Z) 坐标表示,在 3D 空间中可能彼此靠近的两…

6.3 U-boot 启动流程详解

通过对 uboot 启动流程的梳理,我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。 一、链接脚本 u-boot.lds 分析 uboot 的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序…

【Delphi】FMX开发 ios 和 android 异同点(踩坑记)

目录 一、前言 二、补充下基础知识 1. APP程序事件:TApplicationEvent 2. APP内置Web服务器或者UDP服务端或者TCP服务端 三、iOS 和 android 平台的不同点 1. TApplicationEvent的不同点:以下不同点,请仔细阅读! 2. APP内置…

嵌入式培训-Linux系统及C编程高级-DAY6-linux shell脚本编程

Shell脚本概述 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能 Shell脚本编写流程 Shell脚本的文件扩展名…

luceda ipkiss教程 45:在版图上加LOGO

**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片,通过代码就可以将LOGO加到版图上,比如: ** 通过代码可以得到版图上的LOGO: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8daea33f74f342ed9f506ae5d8cea711.…

求导公式,求导的四则运算,复合函数求导

求导公式 求导的四则运算 复合函数求导

原码、反码、补码、大端、小端

原码、反码、补码 计算机中的整数有三种2进制表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”, 而数值位: 正数的原、反、补码都相同。负整数的三种表…