CAP-OData API的$ batch请求

2020-08-17 00:44发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我正在尝试对CDS服务公开的oData api的批量请求。 我正在此示例存储库中针对书店示例测试请求: https://github.com/git-ashish/cloud-cap-samples ,但始终出现以下错误:

 POST/admin/$ batch
 [2020-03-04T12:04:40.503Z | 警告|  1254189]:预计在位置0处的边界
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.505Z | 错误|  1254189]:响应数据已经发送,而响应缓冲区中仍有可用数据
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.506Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.506Z | 错误|  1254189]:响应数据已经发送,而响应缓冲区中仍有可用数据
 

我不确定问题是否与批处理请求的正文形成方式有关。 任何指针都将不胜感激。

请求是:

 curl --location --request POST'http://localhost:4004/admin/$ batch'\
 --header'内容类型:多部分/混合;  boundary = batch_123'\
 --header'授权:基本YXNoaXNoOg =='\
 --data-raw'--batch_123
 内容类型:多部分/混合;边界= changeset_456
 内容传输编码:二进制


 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:50
 接受:application/json


 {
     " ID":101,
     "名称":"艾米莉·勃朗特二世"。
 }
 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:48
 接受:application/json


 {
     " ID":221,
     "名称":"福尔摩斯"
 }
 --changeset_456--


 --batch_123--'
 

在HTTP中:

 POST/admin/$ batch HTTP/1.1
 主机:localhost:4004
 内容类型:多部分/混合;  boundary = batch_123
 授权:基本YXNoaXNoOg ==


 --batch_123
 内容类型:多部分/混合;边界= changeset_456
 内容传输编码:二进制


 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:50
 接受:application/json


 {
     " ID":101,
     "名称":"艾米莉·勃朗特二世"。
 }
 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:48
 接受:application/json


 {
     " ID":221,
     "名称":"福尔摩斯"
 }
 --changeset_456--


 --batch_123--
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我正在尝试对CDS服务公开的oData api的批量请求。 我正在此示例存储库中针对书店示例测试请求: https://github.com/git-ashish/cloud-cap-samples ,但始终出现以下错误:

 POST/admin/$ batch
 [2020-03-04T12:04:40.503Z | 警告|  1254189]:预计在位置0处的边界
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.505Z | 错误|  1254189]:响应数据已经发送,而响应缓冲区中仍有可用数据
 [2020-03-04T12:04:40.505Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.506Z | 警告|  1254189]:标头已发送
 [2020-03-04T12:04:40.506Z | 错误|  1254189]:响应数据已经发送,而响应缓冲区中仍有可用数据
 

我不确定问题是否与批处理请求的正文形成方式有关。 任何指针都将不胜感激。

请求是:

 curl --location --request POST'http://localhost:4004/admin/$ batch'\
 --header'内容类型:多部分/混合;  boundary = batch_123'\
 --header'授权:基本YXNoaXNoOg =='\
 --data-raw'--batch_123
 内容类型:多部分/混合;边界= changeset_456
 内容传输编码:二进制


 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:50
 接受:application/json


 {
     " ID":101,
     "名称":"艾米莉·勃朗特二世"。
 }
 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:48
 接受:application/json


 {
     " ID":221,
     "名称":"福尔摩斯"
 }
 --changeset_456--


 --batch_123--'
 

在HTTP中:

 POST/admin/$ batch HTTP/1.1
 主机:localhost:4004
 内容类型:多部分/混合;  boundary = batch_123
 授权:基本YXNoaXNoOg ==


 --batch_123
 内容类型:多部分/混合;边界= changeset_456
 内容传输编码:二进制


 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:50
 接受:application/json


 {
     " ID":101,
     "名称":"艾米莉·勃朗特二世"。
 }
 --changeset_456
 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:48
 接受:application/json


 {
     " ID":221,
     "名称":"福尔摩斯"
 }
 --changeset_456--


 --batch_123--
 
付费偷看设置
发送
4条回答
SAP砖家
1楼 · 2020-08-17 01:23.采纳回答

尽管我无法使用"多部分/混合"类型的批处理请求成功进行测试,但是JSON批处理请求可以成功进行测试并可以与odata v4一起使用。 关于它的更多详细信息可以在文档中找到:批量请求 OData JSON

这是一个示例JSON批处理请求,可与示例书店代码一起使用。

 curl --location --request POST'http://localhost:4004/admin/$ batch'\
 --header'内容类型:application/json'\
 --data-raw'{
     "要求": [
         {
             " atomicityGroup":" g1",
             " id":" g1-r1",
             " method":" POST",
             " url":"/作者",
             "标题":{
                 " content-type":" application/json; odata.metadata = minimal; odata.streaming = true",
                 " odata-version":" 4.0"
             },
             "身体": {
                 " ID":110,
                 "名称":"艾米莉·勃朗特二世"。
             }
         },
         {
             " atomicityGroup":" g1",
             " id":" g1-r2",
             " method":" POST",
             " url":"/作者",
             "标题":{
                 " content-type":" application/json; odata.metadata = minimal; odata.streaming = true",
                 " odata-version":" 4.0"
             },
             "身体": {
                 " ID":221,
                 "名称":"福尔摩斯"
             }
         },
         {
             " id":" r2",
             "依赖于取决于": [
                 " g1"
             ],
             " method":" PATCH",
             " url":"/img/Authors(110)",
             "标题":{
                 " content-type":" application/json; odata.metadata = minimal; odata.streaming = true",
                 " odata-version":" 4.0"
             },
             "身体": {
                 "名称":"我的艾米莉·勃朗特二世"。
             }
         },
         {
             " id":" r8",
             " atomicityGroup":" g2",
             "依赖于取决于": [
                 " g1",
                 " r2"
             ],
             " method":" GET",
             " url":"/作者",
             "标题":{
                 " content-type":" application/json; odata.metadata = minimal; odata.streaming = true",
                 " odata-version":" 4.0"
             }
         }
     ]
 }'
 

干杯!

追夢秋陽
2楼-- · 2020-08-17 01:02

嗨, Ashish Singh,

这仍然对您有用吗? 如果我在帽应用程序中尝试此操作,则会出现以下错误:

 {
   "错误":{
     "代码":" 400",
     " message":"第'0'行的Content-Type应该为'multipart/mixed',但为'application/json'。"
   }
 } 

似乎如此,仅支持" multipart/mixed"。

能否请您确认JSON批仍在工作?

最诚挚的问候,

Chris

SAP砖家
3楼-- · 2020-08-17 01:18

嗨Ashish,

确保使用回车换行符(即CRLF或" \ r \ n")。

最好,
塞巴斯蒂安

樱桃小丸子0093
4楼-- · 2020-08-17 01:18

感谢您的后续评论和详细信息,塞巴斯蒂安!

我正在Mac OS上工作,并使用Postman和cURL来测试api。 为了确保使用CRLF,我使用了VS Code,并确保将行尾序列设置设置为CRLF。

在第一个边界上加上\ r \ n后,我现在遇到以下错误:

 {
     "错误":{
         " code":" null",
         " message":"处理多部分数据需要更多数据"
     }
 } 

要针对确切的查询进行测试,请使用以下cURL:

 curl --location --request POST'http://localhost:4004/admin/$ batch'\
 --header'内容类型:多部分/混合;  boundary = batch_123 \ r \ n'\
 --header'接受:application/json'\
 --header'授权:基本YXNoaXNoOg =='\
 --data-raw'--batch_123


 内容类型:多部分/混合;边界= changeset_456
 --changeset_456


 内容类型:应用程序/http
 内容传输编码:二进制


 POST/admin/Authors HTTP/1.1
 内容类型:application/json
 内容长度:48
 接受:application/json


 {
     " ID":221,
     "名称":"福尔摩斯"
 }


 --changeset_456--


 --batch_123--'
 

有什么建议吗?

谢谢!

一周热门 更多>