我想写一个批处理OCAPI。
在子请求之一中,我想使用product_search和variant_search OCAPI。
沙箱中的所有设置都是正确的,如果我分别使用它们,则这两个OCAPI可以完美地工作。
仅当我批量使用它们时,我才会收到错误消息。
这是我的要求:
POST /s/-/dw/batch?client_id=xxx HTTP/1.1
Host: xxx-alliance-prtnr-eu09-dw.demandware.net
Content-Type: multipart/mixed; boundary=23dh3f9f4
Authorization: Bearer xxx
--23dh3f9f4
x-dw-content-id: req4
x-dw-http-method: POST
x-dw-resource-path-extension: /s/-/dw/data/v18_8/product_search
{
"query" : {
"text_query": {
"fields": ["id"],
"search_phrase": "73910432"
}
},
"select" : "(hits.(product_id))"
}
--23dh3f9f4
x-dw-http-method: POST
x-dw-content-id: req3
x-dw-resource-path: /s/-/dw/data/v18_8/products/
x-dw-resource-path-extension: 73910432/variant_search
{
"query": {
"text_query": {
"fields": [
"variation_attribute.size"
],
"search_phrase": "34"
}
},
"select": "(hits.(product_id,variation_values))"
}
--23dh3f9f4--
服务器的响应:
--23dh3f9f4
x-dw-content-id: req4
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Content-Length: 95
Cache-Control: no-cache
x-dw-status-code: 500
{"_v":"18.8","fault":{"type":"InternalServerErrorException","message":"Internal Server Error"}}
--23dh3f9f4
x-dw-content-id: req3
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Content-Length: 215
Cache-Control: no-cache
x-dw-status-code: 400
{"_v":"18.8","fault":{"arguments":{"parameter":"Body"},"type":"NullConstraintViolationException","message":"The null value constraint for parameter 'Body' is violated. Null is not allowed. Please provide a value."}}
--23dh3f9f4--
有什么主意吗?
感谢小时帮助,
答案 0 :(得分:0)
可能是由于“ path”标头的滥用。您的主要(/batch
请求)标头中应包含以下内容:
x-dw-resource-path: /s/-/dw/data/v18_8/
然后在req4标头中:
x-dw-resource-path-extension: product_search
类似地,在req3中,您应该具有以下标头:
x-dw-resource-path-extension: products/73910432/variant_search
请注意,您应该不需要在批处理的子请求标头中包含x-dw-resource-path
。仅在主/batch
请求标头中。在上面的示例中,您可以看到我在path
“请求”级别指定的batch
在所有所有子请求中都是相同的。因此,我只需要指定子请求的资源路径。也就是说,如果要批量处理店面和数据请求,则可能需要覆盖基本路径才能在站点或商店资源之间切换。
分析您的示例会产生以下两个请求URI:
req4
该请求可能不会成功,因为您实际上没有为此请求指定任何 x-dw-resource-path
。我只能假设您最终会遇到以下情况:
null/s/-/dw/data/v18_8/product_search
req3
/s/-/dw/data/v18_8/products/73910432/variant_search
这似乎是由于请求格式错误。我看到两个请求的最后一个字符}
与边界之间有两个行尾。尝试将其减少到仅一行结尾,看看是否有帮助。