Сайти на Drupal 8 здатні легко передавати дані на сторонні сайти та додатки. Це можуть бути застосунки для iOS та Android, додатки на Vue.js, React, Angular та інших JS-фреймворках, і так далі. Веб-сервіси в ядрі Drupal 8 забезпечують злагоджену взаємодію між сайтом і сторонніми ресурсами. Щоб підготувати Drupal-дані, розробники часто застосовують REST-експорт через Views у Drupal 8. Сьогодні ми розглянемо Views REST-експорт покроково.
REST-експорт через Views у Drupal 8
Модуль Views в ядрі Drupal 8 дозволяє швидко створювати колекції контенту, користувачів, термінів таксономії і так далі. Ми можемо зібрати Drupal-дані у «в’юшку» і налаштувати її експорт в форматах JSON або XML, які підтримуються сторонніми додатками. В результаті у нас вийде REST API ендпойнт, за яким інші ресурси зможуть запитувати дані.
Увімкнення модулів Drupal 8 для REST-експорту
Почнемо з увімкнення модулів пакету “Web services ”в ядрі Drupal. Для сьогоднішнього прикладу нам знадобляться два модулі з чотирьох — RESTful Web Services і Serialization.
Створення RESTful View
Створення RESTful View Ми будемо виводити контент. Для цього підійде як кастомний, так і вбудований контент-тип (“Article”, “Basic page”). Сьогодні використаємо “Article”. Можемо заздалегідь підготувати кілька тестових статей (Article 1, Article 2, Article 3) — і переходити до створення «в’юшки».
У вкладці “Structure — Views” інтерфейсу сайту, клікнемо “Add new view,” а потім зробимо 3 речі:
- Дамо в’юшці імя.
- Поставимо галочку на опції “Provide a REST export” (яку ми бачимо одразу поряд з традиційними опціями “Create a page” і “Create a block”).
- Пропишемо URL-шлях для REST-експорту (за яким наш контент зможуть запитувати інші ресурси).
Налаштування RESTful View
Наша в’юшка виглядає майже як завжди, тільки показує результат у форматі JSON. Як і в стандартній «в’юшці», ми можемо:
- обирати тип відображення з полями, з сутностями або з результатами пошуку
- фільтрувати або сортувати контент
- лімітувати кількість результатів
- створювати контекстні фільтри
І багато іншого.
Давайте відфільтруємо «в’юшку» за контент-типом “Article”.
І оберемо відображення з полями:
А далі додамо пару полів — “title” і “body.” Можна також в налаштуваннях поля створити кастомний URL-шлях до кожного з них, якщо нам з певних причин не подобається дефолтний шлях.
Незвичний, але важливий елемент в інтерфейсі RESTful Views — це інструмент “Serializer”, що знаходиться в “Format.” В його налаштуваннях (“Settings”) можна обирати формати, в яких буде виводитись контент.
В нашому випадку є вибір між JSON та XML (а при встановленні інших модулів — опцій з’являється більше). Якщо жоден формат не обрано, виведення буде за замовчуванням у JSON.
Давайте збережемо «в’юшку». Дані в форматі JSON доступні за URL-шляхом, який ми прописали при створенні в’юшки (json/content). Це і є наш REST API ендпойнт, і він має наступну структуру:
website-example/json/content.
Ми отримали результат в JSON формату ASCII, що є закодованим в цілях безпеки. Він готовий до використання сторонніми додатками, яким потрібно буде його розкодувати.
Щоб перевірити, чи код валідується, та подивитись на нього в «привабливішому» вигляді, можна скористатись додатком до Chrome або одним із JSON-форматерів та валідаторів онлайн.
Пропускаємо наш код через один із них:
Інший JSON-форматер може зробити JSON ще більш читабельним, розкодувавши його:
Код валідується, тож наша в’юшка готова передавати контент на сторонні ресурси. Отже, ми успішно налаштували REST-експорт через Views у Drupal 8.
Налаштуємо потрібний експорт даних на вашому Drupal-сайті
Хоча архітектура REST підтримує операції CRUD (створення, читання, редагування та видалення даних), Views REST експорт — лише для читання.
Тож якщо вам потрібно, щоб користувачі мобільного додатку могли редагувати дані на Drupal 8 сайті, Views REST export у Drupal 8 експорт вам не підійде. У цих випадках ми запропонуємо інше рішення — повномасштабний REST API в форматі JSON, кастомні ендпойнти і так далі.
Якими б не були ваші ідеї щодо інтеграції зі сторонніми системами, наша Drupal-команда з радістю допоможе вам їх втілити!