<
  • Главная
Статьи

Створення проекту Web-сервісів в Drupal 7

  1. Як отримати та інсталювати необхідних модулів
  2. Малюнок 1. Вміст папки модуля Services
  3. Малюнок 2. Додавання нового сервісу
  4. Створення модуля Спецсервісу
  5. файл .info
  6. Лістинг 1. Файл .info сервісу заміток
  7. файл .install
  8. Лістинг 2. Файл .install сервісу заміток
  9. Лістинг 3. Файл .module сервісу Note
  10. Лістинг 4. Файл .inс сервісу Note
  11. Створення кінцевої точки
  12. Малюнок 3. Нова кінцева точка сервісу
  13. висновок
  14. Ресурси для скачування

Скористайтеся перевагами універсального модуля Services

Модуль Services дозволяє створювати спеціалізовані інформаційні сервери і сервіси на Drupal-сайті з єдиного центру настройки і адміністрування головного модуля. Сервіси, включені в модуль, дозволяють викликати інформаційні матеріали і виводити дані з модулів Drupal File, Comment, Search, User, Menu, Node, System, Taxonomy і Views, що входять в комплект за замовчуванням або доданих користувачем. Викликаючи ці сервіси, інформацію можна витягати з одного Drupal-сайту і відображати на іншому, розташованому на тому ж локальному сервері або в іншому місці. Однак модуль Services можна використовувати і для інтеграції додатків, які не грунтуються на Drupal, - за допомогою зовнішнього Web-сервісу.

Гнучкість модуля Services дозволяє програмно створити свій власний сервісний модуль і інтегрувати його з викликами методів (наприклад, Representational State Transfer [REST], JavaScript Object Notation [JSON] або XML-remote procedure call [XML-RPC]), які входять до складу основного модуля Services. Головна перевага модуля Services полягає в тому, що він допускає інтеграцію Web-сервісу з декількома додатками, використовуючи стандартний код і програму модуля Drupal. Ще важливіше те, що модуль Services допомагає скоротити час, що витрачається на написання власних модулів Web-сервісів, оскільки забезпечує стандартний інтерфейс для цілого ряду стандартних платформ додатків Web-сервісів.

У цій статті йдеться про те, як створити модуль Web-сервісів, який буде виконувати спеціальний зворотний виклик з Drupal-сайту за допомогою модуля Service. Ми напишемо спеціальний модуль, який повертає набір даних з вузла з інформацією певного типу. І покажем, як:

  • написати спеціальний модуль сервісу;
  • інтегрувати цей модуль з модулем Services і перевірити його (на прикладі простого зворотного виклику, який повертає набір вузлів).

Як отримати та інсталювати необхідних модулів

Перш за все, необхідно завантажити з сайту Drupal.org наступні модулі:

  • Services: Це основний модуль Services, що завантажується зі сторінки проекту (див. Посилання в розділі ресурси );
  • набір інструментів Chaos: модуль Services залежить від цього набору, тому його потрібно встановити до або під час установки модуля Services. Набір інструментів Chaos створює середовище для визначення кінцевих точок, які можна визначати і експортувати як в базу даних, так і в код. Див. Посилання на сайт завантаження в розділі ресурси ;
  • сервер REST: для тестування сервісу ми будемо використовувати сервер REST, який входить в пакет завантаження Services. Можна використовувати і інші сервіси, наприклад JSON і XML-RPC;
  • Autoload: для сервера REST потрібно цей службовий модуль. Модуль Autoload дозволяє іншим модулям єдиним, універсальним способом використовувати можливості класу autoloading з PHP 5. Див. Посилання в розділі ресурси .

Встановіть ці модулі в свою папку / sites / all / modules. Завантаживши сервіси, ви знайдете всередині цієї папки дві папки: servers і services. Папка servers містить код модуля Web-сервісів, а основний модуль містить підтримку сервера XML-RPC. В папці services знаходяться модулі для надання Web-сервісів інформації на базі Drupal, включаючи файли, коментарі, вузли, меню, пошук, користувачів, системи, таксономії та подання (див. малюнок 1 . Всі відповідні папки є подмодулей модуля Services.

Малюнок 1. Вміст папки модуля Services

Після завершення установки перейдіть до списку адміністрування основного модуля на своєму Drupal-сайті та включіть головний модуль Services, модуль Key Authentication, сервер XML-RPC і модуль Services. Після включення модулів можна переглядати встановлені і включені сервери і сервіси на сторінці Administration поряд з основними параметрами налаштування сервісів. Зі сторінки / admin / structure / services Web-сайту можна легко переглядати встановлені модулі серверів і сервісів, а також будь-які ключі інтерфейсів прикладних програм (API), додані на сайт для використання з серверами і загальними сервісами. На малюнку 2 наведено приклад сторінки Browse.

Малюнок 2. Додавання нового сервісу

Натисніть кнопку Add, щоб додати в список свій Web-сервіс і назвати його, а також додайте дозволений зовнішньої домен Web-сервера, з яким ви будете підтримувати зв'язок. Тепер Web-сервіс, з яким ви встановили зв'язок, зможе звертатися до вашого сайту, працюючи з цими сервісами і використовуючи дані. Ви, мабуть, вже знайомі з сайтами соціальних мереж, такими як Facebook і Twitter, а також безліччю інших Web-додатків, які дозволяють безперешкодно обмінюватися інформацією та імпортувати дані користувачів для полегшення процедури входу в систему. Сторінка Settings в розділі Admin> Configuration> Services відображає методи перевірки автентичності та включені параметри і пропонує застосувати додаткові дозволи для доступу до інформації. Під час виклику Web-сервісу дозволу полів для окремих типів інформації не будуть задіяні автоматично. За замовчуванням повертаються всі поля без винятку, але можна застосувати спеціальні дозволи доступу до інформації на рівні полів.

Створення модуля Спецсервісу

Модуль Drupal - це сукупність файлів, написаних на PHP, які ефективно розширюють функціональність основного додатка. При ближчому розгляді модуль нічим не відрізняється за структурою від будь-якого іншого файлу PHP, і його можна незалежно створювати, тестувати і використовувати в декількох різних установках. Код модуля зазвичай може звертатися до всіх змінним і структурам, а також використовувати всі функції ядра Drupal. Аналогічно, ядро Drupal для розширення своїх основних функціональних можливостей може викликати функції, визначені в модулях, - через фіксовані інтерфейси, звані пастками (hooks).

Пастки дозволяють Drupal вирішувати, наприклад, такі завдання:

  • додавання нових URL-адрес і сторінок, які визначаються модулем в рамках сайту (hook_menu);
  • додавання інформації на сторінки Drupal (hook_block, hook_footerі т. п.);
  • створення спеціальних таблиць бази даних (hook_schema).

Ви побачите визначення пасток в декількох місцях коду нового модуля, який ми створимо. Файл модуля, як і більшість інших модулів Drupal, як правило, складається з трьох основних файлів: modulename.info, modulename.module і modulename.inc. Більш складний модуль може містити ще кілька файлів.

Щоб приступити до створення спеціального сервісу або файлів модулів сервісу, додайте в папку / sites / all / modules / services нову папку note_service для цього модуля.

файл .info

На додаток до папки note_service створіть новий файл note_service.info. Він буде містити всі метадані та інформацію, необхідну Drupal для включення модуля в головну сторінку адміністрування модулів.

У файл .info введіть код, показаний в лістингу 1 .

Лістинг 1. Файл .info сервісу заміток
name = Note Service description = Services for the Note content type. package = Note example dependencies [] = services files [] = note_service.inc files [] = note_service.module core = 7.x

Збережіть цей файл під ім'ям note_service.info. Цей код визначає ім'я сервісу, його опис, загальний пакет модулів, в який входить даний модуль, і залежності. В даному випадку це означає, що для того щоб наш спеціальний модуль працював, повинен бути встановлений і включений модуль Services. Помістіть цей файл note_service.info в свою папку модулів.

файл .install

Файл .install вказує Drupal, як модуль повинен бути встановлений - в даному випадку шляхом реалізації схеми пасток. Файл .install запускається при першому включенні модуля, і його основна функція полягає в запуску процедур установки, необхідних для цього модуля. Найбільш типове завдання, яке вирішується файлом .install, - це створення таблиці і полів бази даних. Інструкції по встановленню містяться в функції _install (). Ця функція-пастка викликається при первісному включенні модуля. Цей файл використовується і для виконання оновлень при кожному з 'нової версії модуля. Файл .install не має спеціального синтаксису: це просто PHP-файл з особливим розширенням імені файлу. У лістингу 2 наведено код файлу .install сервісу нотаток.

Лістинг 2. Файл .install сервісу заміток
<? Php // note_service.install / ** * Реалізація hook_schema (). * / Function note_service_schema () {$ schema [ 'note'] = array ( 'description' => t ( 'Stores information about notes.'), 'Fields' => array ( 'id' => array ( 'description' => t ( 'The primary identifier for a note.'), 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE,), 'uid' => array ( 'description '=> t (' The user that created the note. '),' type '=>' int ',' unsigned '=> TRUE,' not null '=> TRUE,' default '=> 0,),' created '=> array (' description '=> t (' The timestamp for when the note was created. '),' type '=>' int ',' unsigned '=> TRUE,' not null '=> TRUE, 'default' => 0,), 'modified' => array ( 'description' => t ( 'The timestamp for when the note was modified.'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0,), 'subject' => array ( 'description' => t ( 'The subject of the note'), 'type' => 'varchar' , 'length' => 255, 'not null' => TRUE,), 'note' => array ( 'description' => t ( 'The note'), 'type' => 'text', 'size' => 'medium',),), 'primary key' => array ( 'id'),) ; return $ schema; }?>

визначення сервісу

Тепер створимо файл модуля. Він містить PHP-функцію для повернення масиву даних і виведення вузлів Note. Функція головним чином реалізує функцію Drupal hook_services (). Детальне розуміння розробки Drupal-модуля не потрібно, хоча і корисно. Чи варто говорити, що раз функції файлу .module - це PHP-функції, важливо, щоб в коді файлу модуля присутній відкриває тег <? Php?

Більшість сервісів модуля Services реалізують методи CRUD (створення, витяг, оновлення, видалення, індексування), але дії, цілеспрямовані дії і взаємодію можна здійснювати і іншими засобами, які не описані у цій статті. У лістингу 3 наведено код для створення файлу модуля.

Лістинг 3. Файл .module сервісу Note
<? Php // note_service.module / ** Отримання об'єкта замітки за ідентифікатором. * * @Param int $ id * @return object * / function note_service_get_note ($ id) {return db_query ( "SELECT * FROM {note} WHERE id = '". $ Id. "'") -> fetchAll (); } / ** Запис замітки в базу даних * * @param object $ note * @return void * / function note_service_write_note ($ note) {$ primary_key =! Empty ($ note-> id)? array ( 'id'): NULL; drupal_write_record ( 'note', $ note, $ primary_key); } / ** * Видалення нотатки з бази даних. * * @Param int $ id * @return void * / function note_service_delete_note ($ id) {db_query ( "DELETE FROM {note} WHERE id = '". $ Id. "'"); } / ** * Реалізація функції hook_services_services (). * / Function note_service_services_services () {return array ( 'note' => array ( 'retrieve' => array ( 'help' => 'Retrieves a note', 'file' => array ( 'file' => 'inc' , 'module' => 'note_service'), 'callback' => '_note_service_retrieve', 'access callback' => '_note_service_access', 'access arguments' => array ( 'view'), 'access arguments append' => TRUE, 'args' => array (array ( 'name' => 'id', 'type' => 'int', 'description' => 'The id of the note to get', 'source' => array ( 'path' => '0'), 'optional' => FALSE,),),), 'create' => array ( 'help' => 'Creates a note', 'file' => array ( ' file '=>' inc ',' module '=>' note_service '),' callback '=>' _note_service_create ',' access arguments '=> array (' note service create '),' access arguments append '=> FALSE , 'args' => array (array ( 'name' => 'data', 'type' => 'struct', 'description' => 'The note object', 'source' => 'data', 'optional '=> FALSE,),),),' update '=> array (' help '=>' Updates a note ',' file '=> array (' file '=>' inc ',' module '=> 'note_serv ice '),' callback '=>' _note_service_update ',' access callback '=>' _note_service_access ',' access arguments '=> array (' update '),' access arguments append '=> TRUE,' args '=> array (array ( 'name' => 'id', 'type' => 'int', 'description' => 'The id of the node to update', 'source' => array ( 'path' => ' 0 '),' optional '=> FALSE,), array (' name '=>' data ',' type '=>' struct ',' description '=>' The note data object ',' source '=> 'data', 'optional' => FALSE,),),), 'delete' => array ( 'help' => 'Deletes a note', 'file' => array ( 'file' => 'inc' , 'module' => 'note_service'), 'callback' => '_note_service_delete', 'access callback' => '_note_service_access', 'access arguments' => array ( 'delete'), 'access arguments append' => TRUE, 'args' => array (array ( 'name' => 'nid', 'type' => 'int', 'description' => 'The id of the note to delete', 'source' => array ( 'path' => '0'), 'optional' => FALSE,),),), 'index' => array ( 'help' => 'Retrieves a listing of notes', 'file' => array ( 'file' => 'inc', 'modul e '=>' note_service '),' callback '=>' _note_service_index ',' access callback '=>' user_access ',' access arguments '=> array (' access content '),' access arguments append '=> FALSE , 'args' => array (array ( 'name' => 'page', 'type' => 'int', 'description' => '', 'source' => array ( 'params' => 'page ',),' optional '=> TRUE,' default value '=> 0,), array (' name '=>' parameters ',' type '=>' array ',' description '=>' ',' source '=>' param ',' optional '=> TRUE,' default value '=> array (),),),),),); }?>

Створення зворотних викликів

Для створення зворотних викликів потрібно створити файл note_service.inc, з якого Services зможе дізнатися, як знайти зворотні виклики. У файл .inc будуть включені наступні зворотні виклики (по відношенню до методу CRUD):

  • Create callback,
  • Retrieve callback,
  • Update callback,
  • Delete callback.

Потрібно також включити зворотний виклик index, який отримує і повертає всі замітки певного користувача. Зазначимо тут деякі аргументи методу, навіть якщо вони не використовуються. Такі аргументи потрібні для вказівки того, що підтримується розбиття на сторінки і фільтрація лістингу індексу.

Очевидно, що не всі користувачі повинні мати безперешкодний доступ для перегляду вузлів Note. Тому потрібно включити зворотні виклики доступу. Насправді ці зворотні виклики доступу повинні бути включені в головний файл модуля. Зверніть увагу, що ні функції створення, ні функції редагування не представлені, оскільки вони безпосередньо використовують оператори user_access (). Крім того, на відміну від інших методів, файл не регулює права на замітку, він просто перевіряє сервіс Note, створений для вирішення доступу. В лістингу 4 наведено код файлу .inc.

Лістинг 4. Файл .inс сервісу Note
<? Php // note_service.inc / ** * Як передзвонити для створення сервісів заміток. * * @Param object $ data * @return object * / function _note_service_create ($ data) {global $ user; unset ($ data-> id); $ Data-> uid = $ user-> uid; $ Data-> created = time (); $ Data-> modified = time (); if (! isset ($ data-> subject)) {return services_error ( 'Missing note attribute subject', 406); } If (! Isset ($ data-> note)) {return services_error ( 'Missing note attribute note', 406); } Note_service_write_note ($ data); return (object) array ( 'id' => $ data-> id, 'uri' => services_service_uri (array ( 'note', $ data-> id)),); } // note_service.inc / ** * Як передзвонити для редагування сервісів заміток. * * @Param int $ id * @param object $ data * @return object * / function _note_service_update ($ id, $ data) {global $ user; $ Note = note_service_get_note ($ id); unset ($ data-> created); $ Data-> id = $ id; $ Data-> uid = $ note-> uid; $ Data-> modified = time (); note_service_write_note ($ data); return (object) array ( 'id' => $ id, 'uri' => services_service_uri (array ( 'note', $ id)),); } / ** * Як передзвонити для вилучення сервісів заміток. * * @Param int $ id * @return object * / function _note_service_retrieve ($ id) {return note_service_get_note ($ id); } / ** * Як передзвонити для видалення сервісів заміток. * * @Param int $ id * @return object * / function _note_service_delete ($ id) {note_service_delete_note ($ id); return (object) array ( 'id' => $ id,); } Function _note_service_index ($ page, $ parameters) {global $ user; $ Notes = array (); $ Res = db_query ( "SELECT * FROM {note} WHERE uid = '". $ User-> uid. "' ORDER BY modified DESC"); foreach ($ res as $ note) {$ notes [] = $ note; } Return $ notes; } / ** * Як передзвонити для доступу до сервісу нотаток. * * @Param string $ op * Операція, що підлягає виконанню. * @Param array $ args * Аргументи для передачі зворотного виклику. * @Return bool * Надано доступ, чи ні. * / Function _note_service_access ($ op, $ args) {global $ user; $ Access = FALSE; switch ($ op) {case 'view': $ note = note_service_get_note ($ args [0]); $ Access = user_access ( 'note service view any note'); $ Access = $ access || $ Note-> uid == $ user-> uid && user_access ( 'note service view own notes'); break; case 'update': $ note = note_service_get_note ($ args [0] -> id); $ Access = user_access ( 'note service edit any note'); $ Access = $ access || $ Note-> uid == $ user-> uid && user_access ( 'note service edit own notes'); break; case 'delete': $ note = note_service_get_note ($ args [0]); $ Access = user_access ( 'note service delete any note'); $ Access = $ access || $ Note-> uid == $ user-> uid && user_access ( 'note service delete own notes'); break; } $ Access = TRUE; return $ access; }?>

Коли в папці нового спеціального модуля є файли .info і .module, цей модуль можна включити на сторінці модулів Drupal Administration. Знайдіть модуль Спецсервісу Note, встановіть прапорець поруч з модулем, щоб включити його, і збережіть конфігурацію модуля. Крім того, включіть модулі серверів Services і REST. На цьому створення спеціального модуля note_service завершено.

Створення кінцевої точки

Web-сервіси представляють собою набір програмних інструментів, які можна використовувати різними способами; три найбільш поширених з них - це сервіс-орієнтована архітектура (SOA), RPC і REST. RPC використовувався першими інструментами Web-сервісів і тому став найбільш широко поширеним і підтримуваним стилем, незважаючи на те, що він занадто тісно пов'язаний з конкретними мовами або викликами методів. REST, навпаки, використовує HTTP і аналогічні протоколи через знайомі операції, такі як GET, POST, PUT і DELETE, так що він більше взаємодіє з ресурсами, що вони бережуть стан, ніж з операціями і повідомленнями. Обидва серверних інструменту включені в модуль Services (див. Папку Servers). У цю папку можна завантажити та інші інструменти, але цей приклад фокусується на методі REST, тому що кінцева точка універсальна.

Кінцева точка вказує певне місце, в якому сервіс може бути доступний за допомогою певного протоколу і формату даних. Існує два способи створення кінцевої точки - за допомогою коду і за допомогою інтерфейсу адміністрування. Створення кінцевої точки за допомогою інтерфейсу адміністрування - це більш простий варіант, так як потім можна експортувати і вставляти код в свій модуль. Щоб створити кінцеву точку, виконайте наступні дії.

  1. Виберіть Add з меню Admin> Structure> Services.
  2. Назвіть кінцеву точку note.
  3. Виберіть REST як сервер і помістіть шлях до кінцевої точки в note.
  4. Зніміть прапорці Debug Mode і Session Enabled.
  5. Натисніть кнопку Save. на малюнку 3 показаний процес створення нової кінцевої точки сервісу.
    Малюнок 3. Нова кінцева точка сервісу

    Збільшена версія малюнка 3

  6. Натисніть на посилання Services і виберіть сервіси або групи сервісів, які потрібно включити. Зніміть прапорець notes.
  7. Натисніть кнопку Save.
  8. Клацніть на вкладці Server, потім зніміть прапорець application / x-www-form-urlencoded під Request parsing.
  9. Натисніть кнопку Save.

Ви створили в своєму сервері REST діючу кінцеву точку.

висновок

З цієї статті ви дізналися, як використовувати модуль Drupal Services. Ви встановили і включили доповнений модуль Services і розглянули функціональність його серверів і сервісів. Ви навчилися додавати модулі сервера для інтеграції з Drupal-сайтом і його змістом і надавати свій Drupal-контент зовнішнім Web-сайтів, використовуючи готові підмодулі Services. Ви створили спеціальний модуль, який можна інтегрувати з модулем Services, і функціональність за замовчуванням якого можна розширювати, і склали виклик методу для отримання зворотного виклику, який виводить список всіх вузлів і даних для інформації певного типу.

Ресурси для скачування

Схожі теми

Підпишіть мене на повідомлення до коментарів

Module - це PHP-функції, важливо, щоб в коді файлу модуля присутній відкриває тег <?
Php?
Empty ($ note-> id)?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью