2

我想写一个批处理 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--

任何想法?

感谢您的小时帮助,

4

1 回答 1

0

对于“req4”子请求

这可能是由于误用了“路径”标头。您的主(/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:

请求4

这个可能不会去任何地方,因为您实际上没有为此请求指定任何内容。 x-dw-resource-path我只能假设您最终会得到以下结果:

null/s/-/dw/data/v18_8/product_search

请求3

/s/-/dw/data/v18_8/products/73910432/variant_search

对于 req3 中的错误(可能两者都有)

这似乎可能是由于请求的格式不正确。}我看到两个请求中的最后一个字符和边界之间有两个行尾。尝试将其减少到只有一行结尾,看看是否有帮助。

于 2019-04-11T18:39:11.613 回答