Salesforce Commerce Cloud - добавьте подзапрос поиска в пакетном OCAPI - PullRequest
0 голосов
/ 08 октября 2018

Я связываюсь, чтобы написать пакет OCAPI.

В одном из подзапросов я хотел бы использовать OCAPI product_search и variable_search.

Все параметры в песочнице верны, два 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--

Есть идеи?

Спасибо за часовую помощь,

1 Ответ

0 голосов
/ 11 апреля 2019

Для подзапроса 'req4'

Вероятно, это связано с неправильным использованием заголовков '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 'request', является общим для всех подзапросов.Поэтому мне нужно только указать путь к ресурсу подзапроса.Тем не менее, если вы хотите группировать запросы магазина и данные, вам может потребоваться переопределить базовый путь для переключения между сайтами или ресурсами магазина.

Анализ вашего примера приводит к следующим двум URI запроса:

req4

Этот может никуда не пойти, потому что вы фактически не указали любой x-dw-resource-path для этого запроса.Я могу только предположить, что вы получите что-то вроде:

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

req3

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

За ошибку в req3 (вероятно, оба)

Похоже, что это может быть связано с ошибкой запроса.Я вижу, что между последним символом } и границей в обоих запросах есть два конца строки.Попробуйте уменьшить это до конца строки и посмотрите, поможет ли это.

...