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系统与外部应用之间的数据交换更加简单和标准化。
相关文章:

SAP RESTful架构和OData协议
一、RESTful架构 RESTful 架构(Representational State Transfer)是一种软件架构风格,专门用于构建基于网络的分布式系统,尤其是在 Web 服务中。它通过利用 HTTP 协议和一组简单的操作(如 GET、POST、PUT、DELETE&…...

centOS定时任务-cron服务
最近在训练模型的过程中,经常会因为内存爆炸而停止模型训练过程,而且因为内存占满停止的训练进程甚至都没有任何的报错提示。 1、需要减少num_worker的数量,降低需要占用内存的数据数量 2、可以通过free -h监控内存的占用情况 3、可以通过lin…...

Python毕业设计选题:基于django+vue的宠物服务管理系统
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 宠物商品管理 医疗服务管理 美容服务管理 系统…...

css常用属性有哪些
在上篇文章我们知道了利用css选择器来对HTML进行简单装饰,就像做word文档一样,需要对哪一段落修改格式,就需要先选中,css选择器就是这意思。这格式如何修改,怎么放大字体,怎么加粗,怎么修改背景…...

八大设计模式
设计模式在日常软件开发中的重要性 目录 单例模式工厂模式策略模式代理模式观察者模式装饰器模式模板方法模式建造者模式总结 单例模式 单例模式确保一个类只有一个实例,通常用于管理共享资源,如配置、缓存、线程池等。 代码实现:双重检查…...

神经网络基础-初识神经网络
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经…...

《计算机视觉:瓶颈之辩与未来之路》
一、计算机视觉的崛起 计算机视觉是使用计算机模仿人类视觉系统的科学,让计算机拥有类似人类提取、处理、理解和分析图像以及图像序列的能力。它是一个多学科交叉的领域,与机器视觉、图像处理、人工智能、机器学习等领域密切相关。 计算机视觉行业可分为…...

Centos gcc 12.3 安装
参考博文1:Centos系统升级gcc_centos6升级gcc-CSDN博客 参考博文2:centos7升级gcc9之代码笔记_centos7 gcc9-CSDN博客 CentOS系统通常自带的软件包管理器(如YUM)不会包含最新版本的GCC,要安装GCC 12.3,你需要使用CentOS的第三方仓库,或者从源代码编译。 如果选择从源…...

B站bilibili视频转文字字幕下载方法
本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件,通过插件获取字幕。随着大模型,生成式AI,ChatGPT的应用,B站也提供了AI小助手对视频的内容进行总结…...

vue CSS 自定义宽高 翻页 剥离 效果
新增需求,客户需要类似PPT的剥离效果用于WEB页面翻页,查找资料后,参考下方的掘金博主的文章,并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量,样式style中的属性与宽高的关系整理成了公式进行动态计算。 …...

uniapp使用百度地图配置了key,但是显示Map key not configured
搞了我两天的一个问题。 hbuilderx版本:4.36 问题介绍: 我的项目是公司的项目,需要在H5端使用百度地图,使用vue-cli创建的uniapp,就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因…...

Leetcode42-环形链表
题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使…...

C语言进阶(2) ---- 指针的进阶
前言:指针的主题,我们在初阶的《指针》章节已经接触过了,我们知道了指针的概念: 1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2.指针的大小是固定的4/8个字节(32位平台/64位平台)。 3.指针是…...

使用Python筛选图片
需求:图片识别,一堆人脸照片中,其中有不是人脸的,把模糊的,侧脸的,重复的去掉 使用说明: 安装好所需要的包: 第一步:输入图片路径 第二步:创建图片输出路径…...

GESP CCF python五级编程等级考试认证真题 2024年12月
1 单选题(每题 2 分,共 30 分) 第 1 题 下面的程序中,x,y都是正整数,完成的算法是( ) def chenadai(x, y): while y: x, y y, x % y return x A. 最小公倍数 …...

URL的概念与格式
URL概念及组成 1、URL简介2、URL组成 1、URL简介 URL(Uniform Resource Locator)即统一资源定位符,是一种用于标识和定位互联网上资源的字符序列 URL主要用于在Web中标识和定位Web页面、图像、文件、服务和其他各种类型的资源 URL提供了一种…...

【Elasticsearch】高亮搜索:从原理到Web呈现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

samout llm解码 幻觉更低更稳定
这段代码定义了一个简单的对话生成系统,包括模型加载、词汇表加载、以及基于给定提示生成文本的功能。下面是对代码的解析: load_model_and_voc(device"cpu"): 该函数用于加载预训练的模型和词汇表(vocabulary)。它首先…...

单片机:实现多任务处理(附带源码)
单片机实现多任务处理 多任务处理是现代操作系统的重要特性,通常通过多线程、多进程的方式来并行执行多个任务。在嵌入式系统中,由于资源有限,通常通过时间片轮转或中断机制来模拟多任务处理。本项目将展示如何在8051单片机上实现简单的多任…...

负载均衡oj项目:介绍
目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…...

剑指Offer 03比特位计数
只是记录 题目链接 题目链接 自己想出来的 第一种解法 思路简述 遍历[0,n]之间的数字,对于每一个数字按照二进制的方式展开,判断最低位置是否为1,若为1则1,反之不加,直到该数字等于0就停止。 public static int[] …...

多音轨视频使用FFmpeg删除不要音轨方法
近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…...

elasticsearch 使用enrich processor填充数据
文章目录 使用 POST 请求手动插入用户数据1. 创建 Enrich Policy步骤 1.1: 创建 Enrich Policy步骤 1.2: 执行 Enrich Policy 2. 创建 Ingest Pipeline步骤 2.1: 创建 Ingest Pipeline步骤 2.2: 配置 Enrich Processor 参数 3. 使用 Ingest Pipeline步骤 3.1: 使用 Pipeline 进…...

VMProtect:软件保护与安全的全面解决方案
在当今数字化时代,软件的安全性和保密性愈发重要。VMProtect 作为一款备受瞩目的软件保护工具,因其强大的功能和广泛的应用而成为开发者保护软件的首选方案。 VMProtect 是一款新一代的软件保护实用程序,支持多个编译器平台,包括…...

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:教室信息管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 1.0 项目介绍 开发工具:IDEA、VScode 服务器:Tomcat, JDK 17 项目构建:maven 数据库:mysql 8.0 系统用户前台和管理…...

第十二篇:linux下socket本地套接字通讯
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。 用途 进程间通信:本地套…...

Spring Boot 2.1.7 数据源自动加载过程详解
在 Spring Boot 中,数据源的自动配置是框架中一个关键功能,本文将以 Spring Boot 2.1.7 版本为例,详细讲解在单数据源情况下数据源是如何自动加载的。我们通过源码分析,追踪整个加载流程。 1. 自动配置类的发现 Spring Boot 使用…...

【Vue.js 3.0】provide 、inject 函数详解
在 Vue 3 中,provide 和 inject 是用于跨组件层次结构进行依赖注入的一对 API。这些 API 主要用于祖先组件和后代组件之间的数据传递,尤其是当这些组件之间没有直接的父子关系时。 1. 示例 1.1 provide provide 函数用于在祖先组件中定义一个值&#…...

JVM(Java虚拟机)的虚拟机栈
JVM(Java虚拟机)的虚拟机栈是Java程序运行时的重要组件,以下是对其的详细解析: 一、概念与功能 概念:虚拟机栈也称为Java栈,是JVM为每个线程分配的一个私有的内存区域。每个线程在创建时都会创建一个虚拟…...

Elasticsearch02-安装7.x
零、文章目录 Elasticsearch02-安装7.x 1、Windows安装Elasticsearch (1)JDK安装 Elasticsearch是基于java开发的,所以需要安装JDK。我们安装的Elasticsearch版本是7.15,对应JDK至少1.8版本以上。也可以不安装jdk,…...