最近Jerry参与了SAP Commerce Cloud的标准开发,我们调用微软云平台Azure上创建Lambda Function的Restful API来创建Lambda Function:
在开发过程中发现该API工作不太稳定,同样的输入,时不时会返回HTTP 400 Bad Request:Encountered an error (InternalServerError) from host runtime
这个错误并不是总能重现。
通过排查,最后我们确认这个问题和我们调用API的代码无关,于是给Azure报了一个bug:
在分析定位问题时,不由得让我怀念起以前在ABAP On-Premise上做开发的一个便利之处——大多数问题都可以通过在ABAP应用服务器端调试来找到根源。
本文记录了2016年时,SAP成都研究院CRM开发团队在开发SAP CRM Fiori应用时的一些技术讨论,关于HTTP请求的响应状态码的差异。
当时我们用Chrome打开SAP Fiori应用,在Chrome开发者工具的network标签里,观察到有的请求响应码为HTTP 200,有的却是HTTP 304.
HTTP 200和HTTP 304理论上的差异解析,网上一搜一大把:
本文我们从一个实际的例子出发,观察ABAP服务器分别是在何种情况下,返回HTTP 200和304这两个状态码的,帮助大家加深理解。
分几种情况进行讨论。
- 第一种情况:HTTP 200 OK
- 第二种情况:HTTP 304 Not Modified
- 第三种情况:HTTP 200(from Cache)
首先进行第一轮测试。
将这种来自SAP UI5标准库文件的url粘贴到浏览器里访问:
https://:7080/sap/bc/ui5_ui5/ui2/ushell/resources/~20160308134900~/sap/fiori/core-min-0.js
得到HTTP 200状态码:
大家想过没有,上图高亮的HTTP响应头部字段,比如last-modified, 是在ABAP服务器上哪段代码里被填充的?
灵活运用Jerry 文章 SAP错误消息调试之七种武器:让所有的错误消息都能被定位 介绍的办法,顺利通过调试的方式,找到准确的位置如下:
上述代码的逻辑:
(1) 第九行,服务器试图从HTTP请求的头部字段中,提取名为If-Modified-Since的字段值,因为这是我第一次请求该JavaScript文件,而这个字段的值逻辑上应该等于第一次请求到达服务器后,从服务器返回的响应结构里名为last-modified字段的值。
在我的第一轮测试里,因为是第一次请求该文件,HTTP请求头部没有包含If-Modified-Since字段,所以服务器解析出的值为空,即变量lv_modified_since为空。
(2) 在我使用的ABAP服务器上,JavaScript文件core-min-0.js最后修改的时间戳为20160316205045. 因此,两个变量lv_change_time_char和lv_change_time_string都被附上了这个值。
下面第20行代码展示了前文HTTP 200状态码的截图里,HTTP响应字段cache-control被填充的地方。
第二种情况:HTTP 304 Not Modified
之前Chrome浏览器里打开的url:
https://:7080/sap/bc/ui5_ui5/ui2/ushell/resources/~20160308134900~/sap/fiori/core-min-0.js
不用关闭这个浏览器窗口,直接按F5刷新,这次收到的响应码不再是HTTP 200 OK,而是HTTP 304 Not Modified.
为什么会产生这种差异呢?按F5之后仔细观察请求头部,发现第二次请求,浏览器发出的HTTP请求里,If-Modified-Since字段包含的就是第一个请求里从服务器端返回的last-modified字段值。
按F5刷新的这个请求到了服务器端,这一次ABAP服务器成功解析出请求字段If-Modified-Since的值:
将客户端发送过来的这个If-Modified-Since时间戳,同服务器端该文件最后修改的时间戳进行比较(即下图第26行AND后的第二个判断条件),发现二者相等,因此在第28行返回HTTP 304 Not Modified.
第三种情况:HTTP 200(from Cache)
关掉Chrome,再打开,再访问同一url,此时Chrome直接从自身的cache里返回该JavaScript文件,而不是向ABAP服务器上发起请求。因此服务器上所有ABAP断点均不会触发。
再回到Jerry遇到的那个Azure上执行function创建API遇到的HTTP 400 Bad request的incident,至本文发稿时为止还是未能得到解决。
尽管Azure的Function Host运行时也是开源的,但不能调试,我拿着这些海量代码也没辙,目前Github上看到的就有多达967个开着的issue.
从开发者遇到问题后调试定位这个角度上说,还是ABAP On-Premises方便啊。
感谢阅读。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
ABAP专题
- Jerry的ABAP, Java和JavaScript乱炖
- ABAP开发人员未来应该学些什么
- Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
- Jerry的ABAP原创技术文章合集
- 300行ABAP代码实现一个最简单的区块链原型
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
- 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C语言和ABAP
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
- 我用ABAP做过的那些无聊的事情
- 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
- 使用Visual Studio Code编写和激活ABAP代码
- 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
- 在SAP云平台ABAP编程环境上编写第一段ABAP程序
- SAP官方发布的ABAP编程规范
- ABAP Code Inspector那些隐藏的功能,您都知道吗?
- 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
- ABAP Netweaver体内的那些寄生式编程语言
- 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
- 云端的ABAP Restful服务开发
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
- 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
- Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
- Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
- SAP云平台上的ABAP编程环境里如何消费第三方服务
- ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
- SAP云平台里的三叉戟应用
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
- SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
- ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
- 一段让人瑟瑟发抖的ABAP代码
- 昨日万圣节ABAP怪兽级代码谜团,公布答案啦
- 介绍一种在ABAP内核态进行内表高效拷贝的方法
- 使用SAP Cloud Application Programming模型开发OData的一个实际例子
- 当ABAP遇见普罗米修斯
- 使用ABAP绘制可伸缩矢量图
- ABAP开发环境语法高亮的那些事儿
- SAP错误消息调试之七种武器:让所有的错误消息都能被定位
- 使用ABAP操作Excel的几种方法
- SAP GUI里的收藏夹事务码管理工具
- SAP GUI和Windows注册表
- 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
- ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
- 实现ABAP条件断点的三种方式
- 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
- 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害
- SAP ABAP Netweaver容器化, 不可能完成的任务吗?
- SAP产品增强技术回顾
- SAP API开发方法大全
- 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
相关推荐
标题中的"ZUI2_JSON2_/UI2/CL_JSON_ui2/cl_json_abap_Ui2_cl_json_zui2_json_源"可能指的是一个与ZUI2相关的项目,它利用了ABAP类/UI2/CL_JSON来解析和生成JSON数据。描述中提到,我们需要用到这个类来将JSON格式的...
### SAP-ABAP-OO 实现 CL-SALV-TABLE 的关键知识点 #### 1. ABAP 面向对象的 ALV 显示方法 在 SAP 的 ABAP 环境中,ALV (Application List Viewer) 是一种非常常用的技术,用于在屏幕上以表格的形式展示数据。传统...
【SAP ABAP调用Java生成的Web Service手册】 在SAP系统中,与外部服务进行交互时,经常需要调用由Java等其他语言编写的Web Service。本手册详细介绍了如何在MyEclipse环境中生成Web Service,并在SAP ABAP环境中...
在ABAP面向对象编程(ABAP OO)中,经常需要对ALV(Application List Viewer)进行定制化的控制,包括移除或隐藏某些默认显示的工具栏功能。这通常是为了提供更简洁、更符合业务需求的用户界面。本文将详细介绍如何...
### SAP ABAP与JAVA之间通过RFC传递数据实例详解 #### 需求概述 本文档主要介绍了如何在SAP ABAP系统与JAVA应用程序之间通过RFC(Remote Function Call远程函数调用)实现数据交互的具体实现方法。核心需求是在给定...
SAP ABAP 开发环境和开发工具介绍 SAP ABAP 开发环境和开发工具是 SAP 系统中最重要的组件之一,它提供了一个强大的开发平台,允许开发者创建、测试和部署 ABAP 程序。ABAP 是 SAP 系统中的主要编程语言,用于开发...
《SAP ABAP 4.7开发指南》 在企业级信息技术领域,SAP系统扮演着至关重要的角色,尤其在企业资源规划(ERP)方面。SAP ABAP(Advanced Business Application Programming)是SAP系统中的一种编程语言,用于开发、...
本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要定义一个事件接收器类(Event Receiver Class),用于处理ALV框中的事件。在这个类中...
SAP ABAP常用函数清单 SAP ABAP是一种高级程序设计语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了许多实用的函数,可以帮助开发者快速、高效地开发应用程序。本文将对SAP ABAP常用函数进行总结,涵盖文档...
《工程师突击:SAP+ABAP实用程序开发攻略》则可能更专注于实际应用,它可能详细讲解了ABAP编程中的关键技术和工具,如ABAP Workbench、ABAP Object-Oriented Programming(面向对象编程)、Function Modules、BADI...
资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...
《SAP ABAP实例大全》是一本专注于SAP ABAP编程语言实践的资源集合,旨在为初学者提供全面且易懂的入门指南。SAP ABAP(Advanced Business Application Programming)是SAP系统中的核心编程语言,用于开发企业级业务...
### SAP ABAP ALV 分页显示技术解析 #### 核心知识点:SAP ABAP ALV 分页显示 本篇文章将深入分析一个基于SAP ABAP的ALV(Application List Viewer)分页显示的实现方法。ALV是SAP GUI中用于展示表格数据的一种...
在本课程中,我们将深入探讨SAP ABAP的面向对象技术在ALV(ABAP List Viewer)中的应用,这是SAP ABAP开发学习的第10课,专注于OOALV。这个主题对于任何想要在SAP系统中进行高效数据展现和处理的开发者来说都是至关...
此外,可能还涵盖了ALV Grid Control(ABAP List Viewer)的使用,这是SAP提供的一种标准的表格显示工具。 5. SEC_PMO_TRN_ABAP培训_day5.pptx - 最后一天的课程可能涵盖了更高级的主题,如ABAP对象导向编程(OO ...
在SAP ABAP编程中,ALV(Accelerated SAP List Viewer)是一种强大的工具,用于创建交互式、可自定义的报告。以下是一些关键的知识点,涵盖了从基础到高级的ALV应用: 1. **Simple ALV Grid Report**: 这是ALV报告...
详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。...
在SAP系统中,ALV(Accelerated List Viewer)是一种用于数据展示的工具,它提供了标准的表格形式来显示数据库查询结果。ALV是ABAP编程的重要组成部分,它简化了复杂数据的可视化处理。本篇将深入探讨如何通过ABAP...
SAP ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的语言和环境。BAPI(Business Application Programming Interface)是SAP系统中预定义的接口,用于实现和访问标准的商业对象和...
sap中ABAP开发常用事件的定义及调用 文档展示了逻辑关系