关于 SAP Gateway 响应头部 Last Modified 字段的赋值逻辑
本教程迄今为止,讨论的绝大多数都是 OData 服务数据实现类(Data Provider Class) 的实现。而要讨论 OData 服务的元数据话题,就得去 MPC 类研究。
MPC 类的 define 方法,负责生成 OData metadata 元数据:
Postman 里请求元数据:
/iwcor/cl_ds_svc_proc 的 get_supported_formats, 对于不同类型的请求,返回不同的支持的格式列表.
对于 metadata 元数据请求,只支持 xml 格式:
从配置表里读取缓存是否激活:
-
代表 abap_false
要读取 HTTP 请求标头 if-modified-since,应用程序开发人员可以使用方法 /IWBEP/CL_MGW_REQUEST=>GET_IF_MODIFIED_SINCE()。
例子代码:
DATA lv_if_modified_since TYPE tzntstmps.
lv_if_modified_since = io_tech_request_context->get_if_modified_since( ).
如果导出参数 ES_RESPONSE_CONTEXT-MAX_AGE 设置为一个值,则 SAP Gateway 将生成带有 max-age 指令的 HTTP 响应标头缓存控制。
请注意,如果导出参数 ES_RESPONSE_CONTEXT-MAX_AGE 设置为一个值,则还必须将导出参数 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 设置为 -
(意思是 可以缓存
)。
默认行为:如果导出参数 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 未定义(即设置为 ``),则系统会自动将 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 的默认值设置为值“X”,SAP Gateway 将生成以下 HTTP 响应标头:
cache-control: no-store, no-cache
导出参数 ES_RESPONSE_CONTEXT-LAST_MODIFIED 应填充时间戳,指示相关业务数据的最后一次更改发生的时间。 如果 ES_RESPONSE_CONTEXT-LAST_MODIFIED 填充了时间戳,则 SAP Gateway 将生成具有相关日期的最后修改的 HTTP 响应标头:
last-modified: Tue, 27 Nov 2012 09:41:40 GMT
此外,如果导出参数 ES_RESPONSE_CONTEXT-LAST_MODIFIED 包含的时间戳早于 HTTP 请求标头 if-modified-since,则 SAP Gateway 将发送 HTTP 304 响应(“未修改”)。在这种情况下,将不会发送最后修改的 HTTP 响应标头。
导出参数 ES_RESPONSE_CONTEXT-IS_NOT_MODIFIED 仅在应用程序数据的 LAST_MODIFIED 早于 HTTP 请求标头 if-modified-since 中的时间戳的情况下才可以设置为 ABAP_TRUE。 在这种情况下,相关的申请数据是最新的,根本不需要发送。 然后 SAP Gateway 将生成 HTTP 304 响应(“未修改”)。
相关文章
- 手绘图解java类加载原理
- Java中的线程到底有哪些安全策略
- Java中观察者模式与委托,还在傻傻分不清
- 一图详解java-class类文件原理
- Java遇上SPL:架构优势和开发效率,一个不放过
- 长篇图解java反射机制及其应用场景
- [java并发编程]基于信号量semaphore实现限流器
- java并发编程-StampedLock高性能读写锁
- 【java并发编程】ReentrantLock 可重入读写锁
- 【java并发编程】Lock & Condition 协调同步生产消费
- Java synchronized对象级别与类级别的同步锁
- java并发编程JUC第十二篇:AtomicInteger原子整型
- java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
- java并发编程JUC第十篇:CyclicBarrier线程同步
- java并发编程JUC第九篇:CountDownLatch线程同步
- java并发编程工具类JUC第八篇:ConcurrentHashMap
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
- java并发编程工具类JUC第六篇:SynchronousQueue同步队列
- java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列