Модуль Services позволяет создавать точки доступа к основным функциям Drupal всего в пару кликов.
Кому нужен модуль Services?
-
Flash/Flex или JS разработчикам ищущим серверную CMS
-
Разработчикам мобильных приложений для интеграции Drupal с Android или iOS
-
Всем кому нужна интеграция с удалённым Drupal сайтом
Для каждой точки доступа Services прямо “из коробки” позволяют разграничивать права и выводить данные Drupal.
Данные можно получить практически в любом удобном формате.
Также большим плюсом является наличие неплохого Service Api - что увеличивает их возможности до бесконечности.
С чего начать? (быстрый старт)
1. Скачать и установить:
- CTools (https://www.drupal.org/project/ctools) - модуль Services зависит от этого набора, поэтому его нужно установить до установки модуля Services. CTools создает среду для определения конечных точек, которые можно определять и экспортировать как в базу данных, так и в код.
- Libraries (https://www.drupal.org/project/libraries)
- Services (https://www.drupal.org/project/services)
- Service Tools (https://www.drupal.org/project/services_tools) - рекомендую для новичков
- REST server - идёт в комплекте с Services
2. Создать точку доступа
- Перейти в настройки Services (admin/structure/services) и кликнуть на ссылку Add
- Set server → Ваш REST server
- End point → Машинное имя вашей точки доступа
- Отметить Session authentication
3. Задать настройки
- Перейти на Set resorses (admin/structure/services/list/YOUR_ENDPOINT/resources) и определить права для данной точки
- Перейти на Server settings (admin/structure/services/list/YOUR_ENDPOINT/server) и определить нужные форматы данных
- Тестить (https://www.drupal.org/node/1975670)
4. Использовать это в своих целях
5. Наслаждаться результатом=)
Документация по модулю: https://www.drupal.org/documentation/modules/services
Неплохая статья: http://tylerfrankenstein.com/user/4/code/drupal-services-examples
Пример кода:
// Создание ноды с Entity reference на php c использованием json
function your_module_create_node() {
$url = 'http://site.url/your_end_point/node';
$node_type = 'page';
$node_title = 'Some node title';
$reference_nid = '3';
$node_data = json_encode(array(
'type' => $node_type,
'title' => $node_title,
'field_reference' => array(
LANGUAGE_NONE => array(
'target_id' => $reference_nid,
)
)
));
$login_url = 'http://site.url/your_end_point/user/login';
$user_options = array(
'headers' => array(
'Content-Type' => 'application/json'),
'method' => 'POST',
'data' => json_encode(array(
'username' => 'username',
'password' => 'password'
))
);
$result = drupal_http_request($login_url, $user_options);
if ($result->code == 200) {
$user_data = json_decode($result->data);
setcookie('drupal_session_name', $user_data->session_name);
setcookie('drupal_session_id', $user_data->sessid);
setcookie('drupal_session_token', $user_data->token);
$cookie = '' . $user_data->session_name . '=' . $user_data->sessid . '';
} else return FALSE;
$node_options = array(
'headers' => array(
'Content-Type' => 'application/json',
'Cookie' => $cookie,
'X-CSRF-Token' => $user_data->token,
),
'method' => 'POST',
'data' => $node_data,
);
return drupal_http_request($url, $node_options);
}