当前位置: 首页 > news >正文

REST/SOAP 协议介绍及开发示例

一、REST 协议介绍

        REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,而非具体的协议。它基于 HTTP 协议,利用 HTTP 的 GET、POST、PUT、DELETE 等方法来操作资源,遵循统一接口、无状态、分层系统等原则。

        REST 的核心概念是资源,每个资源都有一个唯一的 URI(统一资源标识符)进行标识。客户端通过发送 HTTP 请求到资源的 URI,对资源进行操作。例如,通过 GET 请求获取资源的表示,POST 请求创建新资源,PUT 请求更新资源,DELETE 请求删除资源。RESTful API 以简洁、轻量级著称,易于理解和开发,在 Web 应用和移动应用开发中广泛使用,尤其适合面向公众、对性能和可扩展性要求较高的场景 。

二、SOAP 协议介绍

        SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于 XML 的协议,用于在分散、分布式环境中交换结构化信息。它包含了信封(Envelope)、编码规则(Encoding Rules)、RPC 表示(RPC Representation)和错误处理(Error Handling)等部分。

        SOAP 基于 XML 格式封装数据,通过 HTTP、SMTP 等协议进行传输,通常使用 POST 方法。它有严格的消息格式和规范,提供了丰富的功能,如消息验证、事务处理等,适用于企业级应用集成、需要严格规范和安全保障的场景。但由于其基于 XML,消息体较大,处理复杂,开发和部署成本相对较高 。

三、REST 与 SOAP 的核心区别

  1. 数据格式:REST 常用 JSON 格式,简洁轻便,易于解析;SOAP 使用 XML 格式,结构复杂,数据量较大。
  2. 协议使用:REST 基于 HTTP 协议,充分利用 HTTP 方法;SOAP 可基于 HTTP、SMTP 等多种协议,但通常以 HTTP POST 为主。
  3. 规范程度:REST 约束相对宽松,更注重接口的简洁和易用;SOAP 有严格的规范和标准,保证了消息的可靠性和安全性。
  4. 性能和效率:REST 由于数据格式简单,传输效率高;SOAP 因 XML 格式复杂,处理和传输效率相对较低。
  5. 应用场景:REST 适用于对性能、扩展性要求高,强调易用性的场景;SOAP 适用于企业级应用集成、对安全性和规范性要求严格的场景。

四、开发示例

(一)REST 开发示例(基于 Python Flask 框架)

首先安装 Flask 库:

pip install flask

以下是一个简单的 RESTful API 示例,实现对用户资源的增删改查操作:

from flask import Flask, jsonify, requestapp = Flask(__name__)# 模拟数据库,存储用户数据users = []# 创建用户(POST方法)@app.route('/users', methods=['POST'])def create_user():data = request.get_json()users.append(data)return jsonify({"message": "User created successfully"}), 201# 获取所有用户(GET方法)@app.route('/users', methods=['GET'])def get_users():return jsonify(users)# 获取单个用户(GET方法)@app.route('/users/<int:user_id>', methods=['GET'])def get_user(user_id):if user_id < len(users):return jsonify(users[user_id])return jsonify({"message": "User not found"}), 404# 更新用户(PUT方法)@app.route('/users/<int:user_id>', methods=['PUT'])def update_user(user_id):if user_id < len(users):data = request.get_json()users[user_id] = datareturn jsonify({"message": "User updated successfully"})return jsonify({"message": "User not found"}), 404# 删除用户(DELETE方法)@app.route('/users/<int:user_id>', methods=['DELETE'])def delete_user(user_id):if user_id < len(users):del users[user_id]return jsonify({"message": "User deleted successfully"})return jsonify({"message": "User not found"}), 404if __name__ == '__main__':app.run(debug=True)

(二)SOAP 开发示例(基于 Python Zeep 库)

首先安装 Zeep 库:

pip install zeep

以下是一个简单的 SOAP 服务示例,实现一个加法运算:

 
from zeep import Client, Serverfrom zeep.exceptions import Faultfrom zeep.wsgi import WSGISoapApp# 定义SOAP服务的模式(WSDL)wsdl = "http://localhost:8000/?wsdl"# 定义服务类class CalculatorService:def add(self, x, y):return x + y# 创建SOAP服务器server = Server(wsdl=wsdl, service=CalculatorService())# 运行SOAP服务器(基于Flask的WSGI应用)from flask import Flaskapp = Flask(__name__)app.wsgi_app = WSGISoapApp(server)if __name__ == '__main__':app.run(port=8000, debug=True)客户端调用示例:from zeep import Client# 创建客户端client = Client("http://localhost:8000/?wsdl")try:result = client.service.add(3, 5)print(f"Result: {result}")except Fault as e:print(f"SOAP Fault: {e}")

        综上所述,REST 和 SOAP 各有优劣,在实际开发中,需要根据具体的应用场景和需求来选择合适的协议。

        以上从多方面介绍了 REST 和 SOAP 协议及开发示例。如果你对某个部分想深入了解,或者有特定的开发需求,欢迎和我说说。

http://www.xdnf.cn/news/391645.html

相关文章:

  • web animation API 锋利的css动画控制器 (更新中)
  • Python高级爬虫之JS逆向+安卓逆向2.1节: 网络爬虫核心原理
  • 【c++】【数据结构】二叉搜索树详解
  • InnoDB引擎
  • JVM规范之运行时数据区域
  • 【沉浸式求职学习day36】【初识Maven】
  • 低功耗蓝牙BLE之发射功率(mW/dBm)对应关系
  • jna总结1
  • 26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)
  • 在C++中,符号位是否参与位运算
  • BUUCTF——Ezpop
  • [Java实战]Spring Boot 静态资源配置(十三)
  • Appium-OppoA92S-真机记坑
  • ARP协议的工作原理
  • Linux `uname` 指令终极指南
  • 无需大规模重训练!GraspCorrect:VLM赋能机器人抓取校正,抓取成功率提升18.3%
  • 如何使用 Netstat 查看监听端口
  • 环形链表(简单)
  • 谈程序的地址空间
  • 智能座舱开发工程师面试题
  • 代码随想录算法训练营第六十天| 图论7—卡码网53. 寻宝
  • 《AI大模型应知应会100篇》第55篇:大模型本地开发环境搭建
  • 机器人运动控制原理浅析-UC Berkeley超视觉模态模型
  • LangGraph框架中针对MCP协议的变更-20250510
  • android-ndk开发(12): 获取ndk内置clang的版本详情
  • git 报错:错误:RPC 失败。curl 28 Failed to connect to github.com port 443 after 75000
  • YashanDB(崖山数据库)V23.4 LTS 正式发布
  • 用户态到内核态:Linux信号传递的九重门(一)
  • Kubernetes基础(三十二):Worker节点启动全解析
  • 无人机飞控算法开发实战:从零到一构建企业级飞控系统