Рейтинг:1

?_format=json не создает JSON для файлов, REST

флаг us
J.g

Я использую Drupal 9.3 с пользовательским интерфейсом REST, веб-службами RESTful и включенной сериализацией. Для пользовательского интерфейса REST у меня есть следующая конфигурация файлов:

Методы: ПОЛУЧИТЬ, ПОСТАВИТЬ, УДАЛИТЬ, ИСПРАВИТЬ

Принимаемые форматы запросов: json, xml

Поставщики аутентификации: cookie,

но когда я пытаюсь получить json для файла (добавляя ?_format=json к URL), я просто получаю сам файл обратно (другими словами, страница такая же, как и без ?_format=json). Это происходит только для файлов, как медиа, так и узлы генерируют JSON как обычно.

Кто-нибудь сталкивался с этим или знает, как это исправить?

J.g avatar
флаг us
J.g
Например, когда у меня есть какой-то носитель, скажем, `baseurl/media/1`, я могу получить json, изменив URL-адрес на `baseurl/media/1?_format=json`, аналогично узлам, `baseurl/node/ 1?_format=json`, я хотел бы сделать то же самое с файлами типа `baseurl/sites/default/files/2021-06/test_0.txt`
Рейтинг:1
флаг in

Это связано с тем, что Drupal доставляет файл из файловой системы без какой-либо обработки.

Если вы хотите, чтобы файл был доставлен в формате JSON (что бы это ни значило). Вам нужен контроллер, который загружает файл, затем выполняет json_decode для содержимого и возвращает результат в виде Symfony\Component\HttpFoundation\JsonResponse.

И вам также нужен маршрут для этого метода контроллера.

J.g avatar
флаг us
J.g
Я новичок в Drupal, не могли бы вы дать несколько советов о том, как это сделать (создание контроллера и маршрута)
Rainer Feike avatar
флаг in
Все это, включая примеры кода, можно найти на drupal.org, т.е. здесь: https://www.drupal.org/docs/drupal-apis/routing-system/introductory-drupal-8-routes-and-controllers- пример
Рейтинг:0
флаг cn

Вы не можете добавить ?_format=json к URL-адресу файла в www.example.com/sites/default/files потому что это просто каталог файлов сайта.

Так почему же Drupal выдает вам json, когда вы добавляете ?_format=json к www.example.com/node/123?_format=json или же www.example.com/media/123?_format=json? Это потому что это сущности.

Итак, как вы можете использовать ?_format=json с файлами? Вам нужно будет использовать сущности.

Проще всего это сделать с помощью Медиа-модуля, встроенного в ядро.

Чтобы попробовать это:

  1. Установите медиа-модуль.
  2. Перейти к /admin/структура/медиа.

По умолчанию будут созданы некоторые основные типы мультимедиа (аудио, документ, изображение, удаленное видео и видео).

Проверьте документ тип носителя, так как это хороший пример использования файлов.

Вы также можете легко создавать новые типы мультимедиа для своего конкретного случая использования.

Затем вы можете использовать ?_format=json на URL-адресах мультимедиа, которые вы создаете.

Недостатком этого подхода является то, что вы все еще не можете получить json из пути к каталогу файлов; вместо этого вам придется использовать URL-адрес медиа-объекта.

Чтобы автоматически установить URL-адреса медиаобъекта на основе шаблона, вы можете использовать Патавто.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.