Contentful: запретить запуск веб-перехватчика при использовании Content Management API.

Итак, я создал веб-перехватчик на панели управления Contentful, который срабатывает, когда запись публикуется или удаляется, и работает должным образом. Однако я хочу иметь возможность публиковать записи через API JavaScript управления контентом, не вызывая веб-перехватчик. Могу ли я предпринять какие-либо меры, чтобы это стало возможным?


person thebfftim    schedule 06.06.2017    source источник


Ответы (1)


К сожалению, нет никакой разницы, публикуется ли запись напрямую через API или через веб-приложение. Веб-приложение просто вызывает скрытый API.

Что может быть возможным, так это проверить опубликованную запись в веб-хуке и оценить, должен ли код выполняться или нет. Возможно, установив скрытое поле при публикации через API напрямую.

Например, если у вас есть поле publishedThroughAPI, вы должны убедиться, что это поле не указано в API доставки и недоступно для редактирования:  введите описание изображения здесь

Затем установите для этого поля значение true непосредственно перед публикацией через API JavaScript, проверьте это поле в своем веб-перехватчике и просто вернитесь из перехвата, если для поля установлено значение true.

Веб-перехватчик получит полезную нагрузку, содержащую вашу опубликованную запись. В основном та же полезная нагрузка, что и для обычного запроса, с той разницей, что она будет содержать все языковые стандарты. Ниже приведен небольшой пример:

{
   "sys": {
         //System meta data, created at, published at etc.
    },
   "fields": {
       //All fields of the entry.
       "title": {
            "en-US": "English title",
            "sv-SE": "Swedish title"
       },
       "publishedThroughAPI": {
            "en-US": true,
            "sv-SE": true
       }
   }
}
person Robban    schedule 06.06.2017
comment
Все это имеет смысл, однако как я могу узнать, какие параметры / записи отправляются на веб-перехватчик? - person thebfftim; 07.06.2017
comment
Опубликованная запись отправляется в веб-перехватчик в качестве полезной нагрузки. Дополню свой ответ примером. - person Robban; 07.06.2017
comment
Есть ли способ извлечь полезную нагрузку с помощью PHP? - person thebfftim; 07.06.2017
comment
Безусловно, вы могли бы сделать что-то вроде $payload = file_get_contents('php://input'); и прочитать строку json в переменной полезной нагрузки. Затем вы можете декодировать его с помощью $jsonObject = json_decode($string, true); и продолжить чтение определенного ключа, например этого $jsonObject['fields']['publishedThroughAPI']['en-US'] - person Robban; 07.06.2017
comment
отлично, это работает, когда запись публикуется через API. Однако есть ли аналогичный трюк, который я мог бы использовать, чтобы отменить публикацию записи через API, не вызывая веб-перехватчик? С api contentful-management, похоже, я могу предоставить только идентификатор записи в качестве полезной нагрузки - person Manube; 29.10.2017