SAP RESTful架构和OData协议

一、RESTful架构

       RESTful 架构(Representational State Transfer)是一种软件架构风格,专门用于构建基于网络的分布式系统,尤其是在 Web 服务中。它通过利用 HTTP 协议和一组简单的操作(如 GET、POST、PUT、DELETE)来进行通信,以实现客户端和服务器之间的交互。RESTful 架构强调无状态、资源导向和统一接口等原则,广泛应用于现代 Web 服务和 API 设计中。

1、关键特点

a、无状态

        每个请求都是独立的,服务器不会在请求之间保存任何状态信息每个请求都必须包含完成该请求所需的所有信息(如认证信息、数据等)。这使得 RESTful 服务具有良好的可伸缩性,因为服务器不需要管理会话状态。请求头的信息必须全面。

b、客户端-服务器架构

        客户端和服务器是分离的,客户端负责用户界面和交互,服务器负责数据存储和业务逻辑处理。二者通过网络通信,互不依赖,因此可以独立演化和优化。

c、统一接口

        RESTful 系统遵循统一的接口规则,使得客户端和服务器的交互变得简洁。通常,RESTful API 使用标准的 HTTP 动作(如 GET、POST、PUT、DELETE)来访问资源。

        GET:获取资源

        POST:创建新资源

        PUT:更新现有资源

        DELETE:删除资源

d、资源

        在 RESTful 架构中,资源是系统中的任何可以被表示和操作的对象,通常以 URL(统一资源定位符)来标识。资源可以是数据(如用户信息、商品)或功能(如计算)。每个资源都有一个唯一的 URI(统一资源标识符)

e、分层系统

        RESTful 架构支持分层系统,即服务器和客户端之间可以存在多个中间层(如负载均衡器、缓存服务器、网关等)。这些中间层能够透明地处理请求和响应,但对客户端和服务器是透明的,不会影响系统的整体功能。

2、RESTful架构优点

a、简单

        RESTful 设计理念简单,基于 HTTP 协议的标准操作,使得客户端和服务器的通信非常直观。开发和维护相对容易。

b、灵活

        由于 REST 是资源导向的,客户端和服务器能够独立进化,修改一方的实现不会影响到另一方。客户端只要保留调用格式,服务器只要进行实现,互不影响。

c、高效

        RESTful 服务通常使用 JSON 或 XML 等轻量级数据格式,请求头包含所有的信息,这使得请求和响应较为简洁且高效,适合于移动设备等带宽有限的环境。

d、可扩展

        无状态的设计意味着服务器不需要存储任何会话信息,这为系统提供了更好的可扩展性。负载均衡和分布式系统能够很容易地实现。

e、标准化

        RESTful API 遵循 HTTP 标准,支持广泛的工具和库(如浏览器、代理服务器、缓存等),提高了与其他系统的兼容性。

3、常见使用RESTful的框架

a、SpringBoot(Java)

        Spring Boot 提供了非常强大的 REST 支持,通过 @RestController@RequestMapping 等注解来简化 RESTful API 的构建过程。

b、Django Rest Framework (Python)
c、Laravel (PHP)

4、与其他架构的对比

5、SAP RESTful

a、ABAP Restful Client ABAP作为Client端,连接外部系统的Restful服务

        创建一个类,实现类中的方法来进行连接服务器、请求服务、对于响应的数据进行处理等。

b、ABAP Restful Server ABAP作为Server端,对外提供Restful服务

        用下面介绍的方法,将自己在系统里面创建Gateway Service,往往遵从OData协议,支持 CRUD 操作(CREATE、READ、UPDATE、DELETE),这些服务能够通过标准 HTTP 方法(GET, POST, PUT, DELETE)与外部客户端进行交互。满足我们的需求。

二、OData协议

        OData(Open Data Protocol) 是一种基于 REST 架构的 Web 协议,主要用于查询和操作数据。它定义了一个统一的标准,使得不同系统、平台和应用程序能够通过简单的 HTTP 协议进行数据访问和操作。OData 的主要目标是简化数据访问过程,并提供灵活、标准化的数据接口,以支持数据的查询、过滤、排序、分页、更新等功能。

在SAP中,我们可以创建Gateway Service。

1、使用事务码SEGW创建Gateway Service

a、点击右上角创建按钮,输入项目名称、描述,选择包,点击确认。

b、创建成功后,自动生成了如图中的数据,点击生成运行时对象按钮。

上传工作台请求,出现如图中所示提示框。系统自动生成了一些类,类中有对属性和方法的定义。点击确认即可。

Model Provider Class规定了当前创建的Gateway Service中包含哪些内容,如数据的定义、一些方法的定义。其中 *_MPC是*_MPC_EXT的父类。一般无特殊要求不对这两个类进行修改。

Data Provider Class包含了CRUD方法具体的实现。其中 *_DPC是*_DPC_EXT的父类。我们一般就只在*_DPC_EXT中对方法进行实现,一般只对他进行修改。

确认之后可以看到系统自动生成了一些类、服务等。

c、创建实体。

数据模型→Entity Type→创建。这里的数据模型还可以依据其他的东西(如搜索帮助、结构体)自动创建,可以自己尝试。

弹出框输入实体的名称,若需要该实体的集合,勾选下面的选项,名称是自动生成的。 点击确认。

d、对创建的实体的类型进行定义。双击图中标注的实体名称,在ABAP Structure中填入表名或者结构体名(全局定义的),跟Name进行关联。

e、然后点击左侧Properties,按照图中步骤,增加字段,要在ABAP Field处跟数据库中的字段进行绑定(跟数据库建立联系在上一步就已经进行了,这里点击ABAP Field搜索帮助出来的都是数据库的字段)。这里的Is Key很关键,我们后续取单条数据的时候就是通过标注了 Is Key的这个字段来取的。

字段名区分大小写,采用驼峰命名。

所有增加的字段:

f、在左边选中*_DPC_EXT右键选中Go to ABAP Workbench可前往编辑页面(我这里不可以。所以只能自己去找)。

可以看到父类信息。

在方法处我们可以看到一些已经定义的方法,但是这里还没有进行方法的实现。 

g、实现类中的方法。

这里我们先实现获取实体集合的方法。

查看方法的参数信息。可以看到很多参数,其中Returning Data是ET_ENTITYSET,我们应该将要返回的数据放到这个参数中。

在修改模式下,选中类,点击重定义方法按钮。

 实现,放在ET_ENTITYSET中:

再实现获取单条数据的方法:
它的参数: 

可以看到有个IT_KEY_TAB的参数,它是放参数KEY的键值对,里面有 NAME 和 VALUE两个字段(可通过调试来看里面的样子)。其中因为我在定义参数的时候只在stuid的Is Key处打了勾所以我的IT_KEY_TAB中的NAME只会有一个值就是 StuID。

它的Returning data是er_entity。

具体的实现如下: 

2、通过事务码/N/IWFND/MAINT_SERVICE创建服务

a、首先要添加服务

b、输入系统别名,点击获取服务,找到自己的技术服务名称(系统之前自动生成的),点击添加所选服务。

 弹出框这里的技术服务名称记一下。点击确认。

c、返回之后就可以看到自己的服务了,前面的没问题但还是看不到的话刷新一下。 选中自己的服务,点击Sap Gateway客户端。

 点击执行。

d、这个页面相当于POSTMAN这种测试软件。通过接口访问我们的方法。权限够的话,在右下角空白的地方会显示XML,但是博主系统权限不够,这里看不到信息。 

 e、若对于这个服务不太清楚,我们删除后面参数内容,点击Add URI Option选择metadata元数据。可以在Entity标签里面看到我们的实体。

 f、用别人的图举例。若我们只实现了实体集合方法的话。可以看到取每个数据时候的id标签。是怎么传StuId的。

若此时我们没有维护取单个数据的方法。XML显示如下,提示我们方法STUDENT_GET_ENTUTY还未实现,此时我们就去对应的类*_DPC_EXT中实现对应的方法即可。

g、若要删除自己的服务。选中后,先要移除系统别名,再删除服务。

注:

我们这里相当于编写后端代码,也可以用PostMan进行测试。前端部分需要进行SAP Fiori的学习。

可以去了解CDS View的有关内容与这里的内容紧密联系。

三、总结

        在SAP中,RESTful 是一种基于HTTP的架构风格,而 OData 是一种基于REST的协议,用于创建和使用Web服务。SAP通过 Gateway服务 提供OData服务,使得前端应用(如SAP Fiori)能够与后端系统进行数据交互。

        OData支持标准的CRUD操作(创建、读取、更新、删除),并通过HTTP方法(GET、POST、PUT、DELETE)进行实现。它使得SAP系统与外部应用之间的数据交换更加简单和标准化。        

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MATLAB的图像增强

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 一、背景及意义介绍背景图像采集过程中的局限性 意义 二、概述三、代码结构及说明(一)整体结构(二&#xf…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…

滚珠花键的保养与维护方法

滚珠花键作为关键的线性运动引导装置,以其高精度和高刚性在众多领域发挥着举足轻重的作用。然而,为了保持其卓越的性能,保养与维护措施不可或缺。 滚珠花键的保养与维护其实就是润滑与清洁,以下是一些具体的保养与维护方法&#x…

Layui table不使用url属性结合laypage组件实现动态分页

从后台一次性获取所有数据赋值给 Layui table 组件的 data 属性,若数据量大时,很可能会超出浏览器字符串最大长度,导致渲染数据失败。Layui table 结合 laypage 组件实现动态分页可解决此问题。 HTML增加分页组件标签 在table后增加一个用于…

fastdds:idl

1使用网络收发数据的最简单方式 在学习idl之前,先来看一下我们在开发中,通过网络收发数据时,常常怎么实现。 struct Student {char name[32];int age;char sex;// f 男,m 女 };//发送侧 struct Student s1 {"xiaoming&q…

计算机网络之多路转接epoll

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之多路转接epoll 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

多个Echart遍历生成 / 词图云

echart官网 安装 如果版本报错推荐安装以下版本 npm install echarts4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:多个Echart遍历生成 vue3echart单个页面多个图表循环渲染展示:<template><div class"main"><div …

Windows server 服务器网络安全管理之防火墙出站规则设置

Windows server 服务器网络安全管理之防火墙出站规则设置 创建一条出站规则 这条出站规则针对IE浏览器设置&#xff0c;指定路径 TCP协议和指定端口&#xff08;多个端口的写法要注意&#xff09; 所有IP&#xff0c;所有应用&#xff0c;都采用阻止 给这条规则进行命名…

jmeter 接口性能测试 学习笔记

目录 说明工具准备工具配置jmeter 界面汉化配置汉化步骤汉化结果图 案例1&#xff1a;测试接口接口准备线程组添加线程组配置线程组值线程数&#xff08;Number of Threads&#xff09;Ramp-Up 时间&#xff08;Ramp-Up Period&#xff09;循环次数&#xff08;Loop Count&…

Pytorch | 从零构建ResNet对CIFAR10进行分类

Pytorch | 从零构建ResNet对CIFAR10进行分类 CIFAR10数据集ResNet核心思想网络结构创新点优点应用 ResNet结构代码详解结构代码代码详解BasicBlock 类ResNet 类ResNet18、ResNet34、ResNet50、ResNet101、ResNet152函数 训练过程和测试结果代码汇总resnet.pytrain.pytest.py 前…

gpu硬件架构

1.简介 NVIDIA在视觉计算和人工智能&#xff08;AI&#xff09;领域处于领先地位&#xff1b;其旗舰GPU已成为解决包括高性能计算和人工智能在内的各个领域复杂计算挑战所不可或缺的。虽然它们的规格经常被讨论&#xff0c;但很难掌握各种组件的清晰完整的图景。 这些GPU的高性…

Java中的方法重写:深入解析与最佳实践

在Java编程中&#xff0c;方法重写&#xff08;Method Overriding&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。它允许子类提供一个与父类中同名方法的具体实现&#xff0c;从而实现多态性&#xff08;Polymorphism&#xff09;。本文将深入探讨Java…

使用vcpkg安装opencv>=4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效

使用vcpkg安装opencv>4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效\无法查找或打开 至少从2024年开始&#xff0c;发布的vcpkg默认安装的opencv版本都是4.x版。4.8版本及以前&#xff0c;vcpkg编译后的opencv头文件目录是*/vcpkg/x64-win…

基于java web在线商城购物系统源码+论文

一、环境信息 开发语言&#xff1a;JAVA JDK版本&#xff1a;JDK8及以上 数据库&#xff1a;MySql5.6及以上 Maven版本&#xff1a;任意版本 操作系统&#xff1a;Windows、macOS 开发工具&#xff1a;Idea、Eclipse、MyEclipse 开发框架&#xff1a;SpringbootHTMLjQueryMysq…

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码&#xff1a; &#x1f44f; star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型&#xff08;Large Language Model, LLM&#xff09;的论文阅读与翻译辅助工具。它通过用户界面&#xff08…

centos7下docker 容器实现redis主从同步

1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…

实现 WebSocket 接入文心一言

目录 什么是 WebSocket&#xff1f; 为什么需要 WebSocket&#xff1f; HTTP 的局限性 WebSocket 的优势 总结&#xff1a;HTTP 和 WebSocket 的区别 WebSocket 的劣势 WebSocket 常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 WebSocket 心跳机制 …

机动车油耗计算API集成指南

机动车油耗计算API集成指南 引言 在当今社会&#xff0c;随着机动车数量的持续增长和环保意识的不断增强&#xff0c;如何有效管理和降低车辆油耗成为了车主、车队管理者以及交通政策制定者共同关注的问题。为了帮助这些群体更好地理解和优化燃油消耗情况&#xff0c;本接口能…

前端yarn工具打包时网络连接问题排查与解决

最近线上前端打包时提示 “There appears to be trouble with your network connection”&#xff0c;以此文档记录下排查过程。 前端打包方式 docker启动临时容器打包&#xff0c;命令如下 docker run --rm -w /app -v pwd:/app alpine-node-common:v16.20-pro sh -c "…

IIC I2C子协议 SMBus协议 通信协议原理 时序 SMBus深度剖析

引言&#xff1a;系统管理总线&#xff08;SMBus&#xff09;是一种双线接口&#xff0c;通过该接口&#xff0c;各种系统组件芯片和设备可以相互以及与系统其他部分通信。它基于IC总线的操作原理。附录B提供了一些SMBus特性与IC总线不同的方式的描述。 SMBus为系统和电源管理相…