如何更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

Web Service架构解析:从SOAP到RESTful API的演进与实践 Web Service作为实现跨平台、跨语言系统间通信的核心技术,其本质是通过标准化协议解决异构系统间的数据交换问题。其工作原理基于客户端-服务器架构,通过定义清晰的接口契约实现松耦合集成。在技术价值层面,Web Service显著提升了系统的互操作性和可维护性,成为企业应用集成和微服务架构的基础。随着技术演进,从早期的SOAP协议到当前主流的RESTful架构,Web Service不断适应新的开发范式。SOAP以其严格的XML格式和WS-*标准体系,在金融、电信等需要高安全性和可靠性的领域仍有应用;而R 阅读详情

一、REST

含状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如:Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

二、REST的架构设计

  REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。

  REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

  REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

三、REST的设计准则

  REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:

l 网络上的所有事物都被抽象为资源(resource)

l 每个资源对应一个唯一的资源标识符(resource identifier)

l 通过通用的连接器接口(generic connector interface)对资源进行操作

l 对资源的各种操作不会改变资源标识符

l 所有的操作都是无状态的(stateless)

四、要点及标准

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。

 

l 资源是由URI来指定。

l 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。

l 通过操作资源的表现形式来操作资源。

l 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。

五、REST的要求

l 客户端和服务器结构

l 连接协议具有无状态性

l 能够利用Cache机制增进性能

l 层次化的系统

l 随需代码 - Javascript (可选)

六、关于状态

应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以大幅降低对HTTP连接的重复请求资源消耗。

七、含状态传输的 Web 服务

含状态传输的 Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:

 

l 直观简短的资源地址:URI,比如:http://example.com/resources/。

l 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等。

l 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

 

下表列出了在实现 含状态传输的 Web 服务时HTTP请求方法的典型用途。

HTTP 请求方法在RESTful Web 服务中的典型应用

资源

GET

PUT

POST

DELETE

一组资源的URI,比如http://example.com/resources/

列出 URI,以及该资源组中每个资源的详细信息(后者可选)。

使用给定的一组资源替换当前整组资源。

在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。

删除 整组资源。

单个资源的URI,比如http://example.com/resources/142

获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等)

替换/创建 指定的资源。并将其追加到相应的资源组中。

把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。

删除 指定的元素。

PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对服务器端有修改,因此當然也是幂等的)。

 

不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准[2]。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。

八、实现举例

例如,一个简单的网络商店应用,

 

列举所有商品,

 

GET http://www.store.com/products

呈現某一件商品,

 

GET http://www.store.com/product/12345

下单购买,

 

POST http://www.store.com/order

<purchase-order>

  <item> ... </item>

</purchase-order>

九、REST的优点

l 可更高效利用缓存来提高响应速度

l 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性

l 浏览器即可作为客户端,简化软件需求

l 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小

l 不需要额外的资源发现机制

l 在软件技术演进中的长期的兼容性更好

十、个人总结

l REST架构只是一种思想,并没有限定任何技术,任何语言。

l REST的本质就是HTTP调用,用于降低各个应用之间的耦合度。

l 良好的REST 架构,应该有统一的表示方式和数据格式,能够有效的把各种资源组织起来,并能够进行有效的控制。


Web Service核心原理与实战:从SOAP/REST到微服务通信 在分布式系统与微服务架构中,服务间通信是核心技术挑战之一。其核心原理在于通过标准化的接口与协议,实现不同平台、语言应用之间的互操作与松耦合。从技术价值看,这解决了系统集成、功能复用与独立部署等关键问题,是现代企业应用集成、云原生架构的基石。常见的实现技术包括基于XML的SOAP协议与基于HTTP的REST架构风格,它们分别适用于对可靠性、安全性要求高的企业级场景与追求轻量、高效的互联网API场景。随着技术演进,gRPC、GraphQL等现代通信协议也在特定场景下展现出优势。本文聚焦Web Service,通 阅读详情

相关推荐

REST WebService简单应用

NULL 博文链接:https://topmanopensource.iteye.com/blog/1279293

Style of WebService: REST vs. SOAP

       在SOA的基础技术实现方式中WebService占据了很重要的地位,通常我们提到WebService第一想法就是SOAP消息在各种传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大网站不断开放API提供给开发者,也激起了REST风格WebService的热潮。       在收到新需求Email之前,我对REST的理解仅仅是通过半懂不懂的看了Fielding

放翁(文初)的一亩三分地 6599

使用restf形式进行webservice开发

NULL 博文链接:https://jayung.iteye.com/blog/2322166

WebApi、WebService、RestApi

1.WebApi 也可叫做HTTPService,基于HTTP协议,我们日常网站、系统都是使用这种形式进行访问我们的应用程序。在处理数据上WebApi效率较高。WebApi无状态,相对WebService更轻量级。 HTTP-GET 和 HTTP-POST HTTP-GET和HTTP-POST是标准协议,使用HTTP对参数进行编码并将参数作为名称/值对传递,还使用关联的请求语义。每个协议都包含一系列HTTP请求标头,HTTP请求标头及其他一些信息定义客户端向服务器请求哪些内容,哪个服务器用一系列HTTP响应

骑个小蜗牛的博客 5189

基于REST架构的Web Service设计

主要介绍了REST的概念、作用;附有相关代码示例;概念清晰明朗;

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8953

什么是REST?以及RESTful的实现

本文介绍了什么是REST,以及RESTful的实现。简单的说,REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。   Spring3.0将全面支持REST 对于REST中无状态(stateless)的一点认识 基于JavaScript的REST客户端框架 RIA+REST架构实现完美WEB开发 REST构架风格介绍:状...

leopard0825的专栏 2336

基于Arduino的智能垃圾桶

通过本次简单的Arduino智能垃圾桶小实验可以快速了解Arduino的基本用法 1、材料准备 Arduino UNO HC-SR04超声波模块 SG90舵机 杜邦线 电源 电脑 2、代码分析 电机的控制 #include<Servo.h> #define duoji D5 Servo myduoji; void setup() { myduoji.attach(duoji); //舵机连接 Serial.begin(115200); } void loop() { myduoji.w

weixin_41679960的博客 1万+

怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

一、REST 含状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。 眼下在三种主流的Web服务实现方案中。由于REST模式与复杂的SOAP和XML-RPC相比更加简洁。越来越多的web服务開始採用REST风格设计和实现。比如:Amazon.com提供接近REST...

weixin_34255055的博客 160

国产化办公新选择:在银河麒麟V10上部署ToDesk远程桌面

本文详细介绍了在国产操作系统银河麒麟V10上部署ToDesk远程桌面的完整指南。作为国产远程控制工具,ToDesk在连接速度、系统适配性和用户体验方面表现优异,特别适合国产化办公场景。文章包含X86和ARM架构的安装步骤、常见问题排查及性能优化技巧,帮助用户高效实现远程办公。

weixin_33742618的博客 232

【SoloPi】SoloPi使用2-功能使用,录制回放

Soloπ是什么 Soloπ是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。 录制回放功能 Soloπ拥有录制操作的能力,用户只需要通过Soloπ执行用例步骤,Soloπ就能够将用户的操作记录下来,并且支持在各个设备上进行回放,这一切都能够在手机上独立完成。 ...

q_Catherine的博客 5829

API、REST API、RESTful API 和 Web Service 之间的区别

本文对比分析了API、Web Service、REST API和RESTful API四种接口技术。API作为应用程序编程接口,通过端点、方法和数据格式实现系统间通信。Web Service通过网络提供服务,支持SOAP和REST两种协议。REST API基于HTTP协议,以资源为中心,通过URI和HTTP动词进行操作。RESTful API则是严格遵循REST原则的API实现。文章通过示例代码展示了各类接口的技术实现,并从性能、效率、安全性等维度进行了对比,指出RESTful API在轻量级、灵活性和扩展

Kenny_abc的博客 1081

LiveReload:释放你的F5,实时预览HTML效果

一、liveReload插件开发背景Web前端开发人员在写页面时,如果修改了HTML or CSS,要想看效果通常的做法就是保存代码就得 Alt+Tab,切换到浏览器(当然,我知道很多开发人员是双屏操作不一定需要切换到浏览器),但是一定要F5刷新才能看自己刚写的代码有没有效果,没有效果就再切换到编辑器下修改,然后再切换到浏览器F5刷新看效果,还没有效果,就再继续修改,如此反复。时间久了,前端自动化...

Char_n的博客 2508

如何在Mendix中发布一个REST Service

目录介绍(Introduction)REST是什么?Published REST Service一般属性Service Name(服务名称)Version (版本)Location 位置信息Reserved Prefixes 保留的前缀Public Documentation 公共文档导出swagger.jsonSecurity 安全需要身份认证身份认证的方式微流允许角色启用 CORS资源操作如何发布一个REST Service介绍前期准备工作配置样例 Project发布REST Service配置REST

西门子Intelligence Center X的博客 1432

一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

(产生多路频率、占空比的PWM)

weixin_56688599的博客 7935

Cadence 批量一次性修改title 页码标题

本文介绍如何在Cadence软件中对DSN文件进行标题栏的批量编辑操作,包括选择编辑对象、使用快捷键打开属性面板以及如何修改标题、页码等关键信息。

tianpu2320959696的博客 975

Rest风格WEB服务(Rest Style Web Service)的真相

写这篇文章是目的不是介绍Web-Service, 而是从Restful Web Service说起来剖析一下 什么才是真正的Restful Style的架构与协议,从而更好的理解web服务的设计理念与架 构本质。 一:Web Service基础知识 一个最简单web服务就一个web页面等待请求与处理。更容易理解的方式是Web  Service可以把一个应用变成一个基本WEB方式的请求与处

关注微信公众号【OpenCV学堂】 1万+

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1427

第三章(续)、使用SpringBoot构建Rest API

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

shmily0300377的专栏 1098

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

轻量级Java Web框架实战测评:从原理到构建REST API服务

在微服务与云原生架构中,轻量级Web框架因其快速启动和低资源消耗的特性,成为提升开发效率和优化部署成本的关键技术。其核心原理在于采用嵌入式Web服务器和极简内核设计,通过减少不必要的模块加载和初始化开销,显著降低了应用启动时间和内存占用。这种设计为开发者带来了更流畅的开发调试体验,并特别适合资源受限的容器化环境。在工程实践中,这类框架通常遵循“约定大于配置”的原则,提供贴近标准Servlet API的编程模型,使得构建RESTful API等服务更加高效。本文聚焦于一款代号为“铝te”的轻量级Java框架,

axfcjwkbi259888707的博客 348

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Jersey 2 和 Spring 4 构建 RESTful web service

时间 2014-11-22 10:41:00  Way Lau's Blog 原文  http://www.waylau.com/jersey-2-spring-4-rest/ 主题 Spring Jersey REST 本文介绍了如何通过 Jersey 框架优美的在 Java 实现了 REST 的 API。CRUD 的 操作存储在 MySQL 中 1. 示例 1

Frvxh的博客 1417

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Web Service入门教程:从原理到动手实现

在软件开发中,Web Service 是实现跨网络、跨平台系统间通信的关键技术。它通过标准化的协议和格式,让不同的应用能够相互交换数据和功能。无论是企业内部系统集成

2509_93883384的博客 236

使用JAX-RS创建RESTful Web Service

本章介绍REST架构、RESTful web service和JAX-RS(Java API for RESTful Web Service,JSR 311)。     JAX-RS的参考实现Jersey实现了对JSR 311中定义的注解的支持,使得使用Java编程语言开发RESTful web service变得简单。     如果是使用GalssFish服务器,可以使用Update Too

Cross 1万+
上一篇: 还在纠结毕业后是去大公司还是小公司工作?我来告诉你至少应该去初创公司工作一次的5大理由
下一篇: Android进程间通信:两个应用之间如何传值
___小星星丶
博客等级 码龄16年 164粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值