-

Jak zintegrować Drupala z innymi systemami w firmie?

Skuteczna integracja różnych systemów w firmie jest dziś kluczowym czynnikiem sukcesu. W świecie dynamicznych technologii i narzędzi informatycznych, Drupal wyróżnia się tym, że jest to ciągle rozwijane oprogramowanie open-source ze wsparciem dużej społeczności. Dzięki elastycznej strukturze modułów napisanych w PHP oraz możliwości korzystania z narzędzi takich jak Composer, Drupal staje się idealnym rozwiązaniem do integrowania różnych programów w organizacji. 

Dlaczego Drupal sprawdzi się do integracji? 

Za Drupalem przemawia nie tylko elastyczność, ale także bogata baza modułów dostępnych na Drupal.org, która ciągle rośnie i często zawiera gotowe rozwiązania do integracji.

Warto też podkreślić, że Drupal posiada własne API, co znacznie ułatwia tworzenie niestandardowych modułów integracyjnych. Ten popularny system bazuje na Symfony, co sprawia, że pisanie nowych integracji jest jeszcze szybsze i łatwiejsze, dzięki dostępowi do zaawansowanych, gotowych rozwiązań. Nie trzeba zaczynać wszystkiego od zera, co pozwala oszczędzić czas i zasoby.

W naszym wpisie odkryjemy, jak wykorzystać potencjał Drupala, aby efektywnie zintegrować go z innymi systemami w organizacji, korzystając z rozbudowanych narzędzi i gotowych opcji dostępnych w tym potężnym oprogramowaniu open source.

Jak wygląda architektura Drupala?

Architektura Drupala odgrywa kluczową rolę w kontekście integracji z innymi systemami. Dzieje się tak zwłaszcza w dynamicznym środowisku biznesowym, gdzie systemy firmy często podlegają modyfikacjom i muszą być łatwo rozszerzalne oraz gotowe na zmiany. 

W miarę jak technologie i wymagania biznesowe ewoluują, elastyczna budowa Drupala umożliwia szybkie wdrażanie zmian oraz dodawanie nowych funkcji i integracji. Jest to niezwykle istotne dla utrzymania konkurencyjności i efektywności operacyjnej w przedsiębiorstwie.  

Język PHP

Drupal został napisany w języku PHP – bardzo znanym i używanym na całym świecie przez web developerów. Jak jego popularność wpływa na integracje Drupala z innymi systemami? 

Język PHP jest powszechnie wykorzystywany w tworzeniu aplikacji internetowych, co sprawia, że istnieją specjalne zestawy narzędzi dla programistów, znane jako SDK (ang. Software Development Kits). Przykładem może być np. SDK dot. usług Google czy SDK dla integracji z eBay

Niezwykle pomocne są także gotowe biblioteki, liczne tutoriale i dokumentacje dotyczące integracji systemów w PHP. Dzięki temu, proces tworzenia połączeń między Drupalem a innymi systemami staje się znacznie bardziej dostępny i efektywny. 

Komponenty Symfony 

Drupal oraz Symfony pozwalają na instalowanie gotowych bibliotek za pomocą narzędzia Composer, co dodatkowo ułatwia proces integracji z zewnętrznymi programami. Te biblioteki często są dostarczane przez systemy, z którymi chcemy się zintegrować, co oznacza, że firmy mają możliwość korzystania z oficjalnych lub nieoficjalnych rozwiązań od producentów. 

W rezultacie proces integracji staje się jeszcze bardziej płynny, a korzystanie z gotowych bibliotek ułatwia tworzenie połączeń i wymianę danych między różnymi platformami. To z kolei przyspiesza implementację integracji.

Przykładem może być instalacja usług Google, takich jak Google Drive czy YouTube:

{

    "require": {

        "google/apiclient": "^2.15.0"

    },

    "scripts": {

        "pre-autoload-dump": "Google\\Task\\Composer::cleanup"

    },

    "extra": {

        "google/apiclient-services": [

            "Drive",

            "YouTube"

        ]

    }

}

Na uwagę zasługuje też SDK udostępniony przez Amazon:
composer require aws/aws-sdk-php

System szablonów Twig

Drupal wykorzystuje system szablonów Twig do renderowania treści na stronach internetowych. Choć może on wydawać się niezwiązany z integracją, ma duże znaczenie dla elastyczności Drupala w tym kontekście. Dzięki Twig możliwe jest zaawansowane przetwarzanie treści wyjściowej, co ułatwia komunikację między różnymi aplikacjami. 

Ponadto system szablonów Twig współpracuje z systemem bibliotek w Drupalu. Pozwala na wykorzystywanie zewnętrznych bibliotek JavaScriptowych, co rozszerza możliwości tworzenia interfejsów użytkownika i dostosowywania ich do danego projektu. W ten sposób Drupal staje się bardziej elastycznym narzędziem do integracji, umożliwiając tworzenie zaawansowanych rozwiązań webowych.

Możemy np. stworzyć własne serwisy do formatowania i filtrowania wyświetlanej treści. Oto przykład zamieniania adresów www.xxxx.xxx na klikalne linki “w locie”: 

service.yml

  my_module_twig_extension.twig.InlinerTwigExtension:

    class: Drupal\my_module_twig_extension\TwigExtension\TwigExtension

    tags:

      - { name: twig.extension }

Kod klasy:

  public function getFilters(): array {
    return [
      new TwigFilter('replaceUrls', [$this, 'replaceUrls']),
    ];
  }
 
/**

   * Replace url link to html link in texts.

   */

  public function replaceUrls($text): array|string|null {

    if (empty($text)) {

      return $text;

    }

    $pattern = '/(http:\/\/\S+|https:\/\/\S+|www\.\S+)/i';

    $replacement = '<a href="$1" target="_blank">$1</a>';

    $text = preg_replace($pattern, $replacement, $text);

    $pattern = '/<a href="www\.(.*?)">(.*?)<\/a>/i';

    $replacement = '<a href="http://www.$1">$2</a>';



    return preg_replace($pattern, $replacement, $text);

  }

I w Twigu dodajemy nasz customowy filtr:

  {{text|replaceUrls }}

Jak przeprowadzić integrację Drupala z innymi systemami? 

Przypomnieliśmy już podstawowe elementy architektury Drupala, które mogą wpływać na połączenie systemu z zewnętrznymi narzędziami. Niżej przedstawimy konkretne podejścia do integracji. 

Integracja z użyciem Drupal Rest API

Integracja z użyciem Drupal Rest API jest stosunkowo prostym i skutecznym procesem. Aby móc go zrealizować, należy włączyć moduł Rest w panelu administracyjnym Drupala, skonfigurować odpowiednie uprawnienia dostępu oraz stworzyć endpointy API.

Drupal Rest API pozwala integrować Drupala z systemami po włączeniu modułu w panelu administracyjnym


Można skorzystać tez z dodatku jakim jest REST UI, który pozwala dodać pewne akcje z poziomu UI.

Integrację Drupala z innymi systemami można przeprowadzić, korzystając z dodatku, jakim jest Rest UI 


Ważne jest również zaimplementowanie mechanizmów autoryzacji i uwierzytelnienia, tak aby zapewnić bezpieczeństwo dostępu do API. 

Drupal i Symfony pozwalają na niestandardowe tworzenie endpointów RESTowych. Programiści mogą korzystać z narzędzi takich jak Guzzle oraz innych bibliotek do tworzenia własnych endpointów API, które dokładnie spełniają potrzeby projektu. To oznacza, że można dostosować strukturę i zachowanie API do konkretnych wymagań biznesowych. W rezultacie udaje się budować spersonalizowane rozwiązania integracyjne i zyskać swobodną wymianę danych między Drupalem lub Symfony a innymi aplikacjami i platformami.

Przed wdrożeniem integracji warto dokładnie przetestować API i stworzyć dokumentację, aby ułatwić innym programistom korzystanie z zasobów i operacji udostępnianych przez API. Dzięki temu Drupal może być skutecznie zintegrowany z innymi systemami, umożliwiając swobodny przepływ danych i operacji między różnymi aplikacjami i narzędziami.

Tworzenie plugina do Rest 

Musimy stworzyć classe z andotacją @RestResource wraz z url_paths oraz rozszerzajacą klasę RestResource. Przykład:

<?php



namespace Drupal\your_module\Plugin\rest\resource;



use Drupal\rest\Plugin\ResourceBase;

use Drupal\rest\ResourceResponse;

use Symfony\Component\DependencyInjection\ContainerInterface;

use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;



/**

 * Provides a resource to get view modes by entity and bundle.

 *

 * @RestResource(

 *   id = "my_custom_resource",

 *   label = @Translation("My Custom Resource"),

 *   uri_paths = {

 *     "canonical" = "/my-custom-endpoint"

 *   }

 * )

 */

class MyCustomResource extends ResourceBase {



  /**

   * {@inheritdoc}

   */

  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {

    return new static(

      $configuration,

      $plugin_id,

      $plugin_definition,

      $container->get('entity.manager')

    );

  }



  /**

   * Responds to GET requests.

   *

   * @return \Drupal\rest\ResourceResponse

   *   The HTTP response object.

   *

   * @throws \Symfony\Component\HttpKernel\Exception\HttpException

   *   Throws exception expected.

   */

  public function get() {

    // Your custom logic here to handle GET requests.

    // For example, you can fetch data and return it as a JSON response.

    $data = ['message' => 'This is a custom REST resource.'];

    return new ResourceResponse($data);

  }



  /**

   * Responds to POST requests.

   *

   * @param mixed $data

   *   The data received in the POST request.

   *

   * @return \Drupal\rest\ResourceResponse

   *   The HTTP response object.

   *

   * @throws \Symfony\Component\HttpKernel\Exception\HttpException

   *   Throws exception expected.

   */

  public function post($data) {

    // Your custom logic here to handle POST requests.

    // For example, you can create a new resource based on the received data.

    // Return a response indicating success or failure.

    return new ResourceResponse(['message' => 'POST request handled.']);

  }



}

Innym podejściem jest stworzenie routingów oraz kontrolerów, które będą odbierać nasze zapytania:

my_module.resource_list:

  path: '/api/resources'

  defaults:

    _controller: '\Drupal\my_module\Controller\ResourceController::getList'

    _title: 'Get list of resources'

  methods: [GET]

  requirements:

    _permission: 'access content'

  formats: ['json']


my_module.resource_get:

  path: '/api/resources/{id}'

  defaults:

    _controller: '\Drupal\my_module\Controller\ResourceController::getSingle'

    _title: 'Get a single resource'

  methods: [GET]

  requirements:

    _permission: 'access content'

  options:

    parameters:

      id:

        type: 'integer'

  formats: ['json']



my_module.resource_create:

  path: '/api/resources'

  defaults:

    _controller: '\Drupal\my_module\Controller\ResourceController::create'

    _title: 'Create a new resource'

  methods: [POST]

  requirements:

    _permission: 'create new resource'

  options:

    parameters:

      data:

        type: 'entity:my_resource'

  formats: ['json']

Dodatkowo prezentujemy, jak w naszym customowym module pobrać przykładowe dane z systemów zewnętrznych, np. z YouTuba, używając GuzzleHttp\Client:

<?php



namespace Drupal\your_module\Controller;



use Drupal\Core\Controller\ControllerBase;

use Symfony\Component\HttpFoundation\JsonResponse;

use GuzzleHttp\Client;



class GoogleApiIntegrationController extends ControllerBase {



  public function getContent() {

    // Configure the Guzzle client

    $client = new Client([

        'base_uri' => 'https://www.googleapis.com/youtube/v3/', // Google API base URL

    ]);



    // Query parameters, including the API key

    $params = [

        'query' => [

            'part' => 'snippet',

            'q' => 'cats', // Example query - search for cat videos

            'key' => 'YOUR_API_KEY', // Replace 'YOUR_API_KEY' with your own Google API key

        ],

    ];



    // Perform a GET request

    $response = $client->get('search', $params);



    // Decode the response JSON

    $data = json_decode($response->getBody());



    // Process data from the response

    $results = [];

    foreach ($data->items as $item) {

        // You can process video data here, such as displaying titles and descriptions

        $results[] = [

            'title' => $item->snippet->title,

            'description' => $item->snippet->description,

        ];

    }



    // Return the results as a JSON response

    return new JsonResponse($results);

  }

}

Integracja Drupala poprzez moduły 

Łączenie Drupala z innymi systemami za pomocą modułów jest popularnym podejściem, które pozwala na rozszerzenie funkcjonalności witryny. Szczególnie, jeżeli to systemy zewnętrzne integrują się z naszą stroną.

Do przykładów popularnych modułów należą:

  • RESTful Web Services: opisany wyżej moduł umożliwia tworzenie zasobów RESTowych i obsługę żądań HTTP, co sprawdza się do komunikacji z innymi aplikacjami i serwisami.
  • Feeds: moduł Feeds pozwala na import i eksport danych z różnych źródeł, co jest przydatne do synchronizacji treści z zewnętrznymi systemami. Przykładowo, w przypadku modułu Feeds możemy zdefiniować źródło danych i mapowanie pól między Drupalem a innym systemem.
  • Tworzenie widoków: moduł Views umożliwia tworzenie niestandardowych widoków, które wykorzystują dane z innych systemów i wyświetlają je w witrynie Drupal. Views może również służyć do prezentacji danych z innych systemów. Szczególnie przydatna w integracjach jest także opcja wystawienia danych w formacie XML, CSV czy innych, które to systemy zewnętrzne mogą w łatwy sposób konsumować. Możemy w tym celu użyć moduł Views data export

Integracja Drupala tą metodą to praktyczne rozwiązanie w różnego typu projektach. Istnieją dedykowane moduły pod konkretne systemy, które są gotowe do użycia lub w znaczący sposób przyspieszają integrację. Kilka przykładowych to:

  • Jira – oprogramowanie do zarządzania projektami,
  • PayPal – system płatności online,
  • HubSpot – platforma CRM,
  • MailChimp – platforma do marketing automation i e-mail marketingu.  

Więcej tego typu komponentów można znaleźć na Drupal.org w kategorii Third-party Integration.

Integracja Drupala z platformą Salesforce

Salesforce to jedna z największych i najbardziej znanych firm zajmujących się oprogramowaniem do zarządzania relacjami z klientami. Oferuje szeroką gamę rozwiązań CRM (ang. Customer Relationship Management) i narzędzi do automatyzacji procesów biznesowych, marketingu, obsługi klienta oraz analizy danych.

Na jej przykładzie pokażemy, jak łatwo można zintegrować tego rodzaju system z Drupalem.

Po pierwsze, możemy wykorzystać moduł dostępny na Drupal.org – Salesforce.

Główny komponent zawiera zestaw modułów, które wspierają integrację z Salesforce poprzez synchronizację różnych Encji (np. użytkowników, węzłów, plików) z obiektami Salesforce (np. kontakty, leady). Obsługuje przesyłanie danych z Drupala do Salesforce’a, a także pobieranie lub importowanie danych z Salesforce’a do Drupala. Zmiany można wprowadzać w czasie rzeczywistym lub asynchronicznie w partiach podczas uruchamiania cron.

Jeżeli z jakichś powodów potrzebujemy bardziej customowych rozwiązań, możemy rozszerzyć to o własny moduł. API Salesforce posiada klasy oraz zestaw hooków do rozbudowy, np.:

/**

 * Implement an EventSubscriber on SalesforceEvents::PUSH_PARAMS.

 */

function hook_salesforce_push_params_alter() {

}



/**

 * Implement an EventSubscriber on SalesforceEvents::PUSH_SUCCESS.

 */

function hook_salesforce_push_success() {

}



/**

 * Implement an EventSubscriber on SalesforceEvents::PUSH_FAIL.

 */

function hook_salesforce_push_fail() {

}

Możemy ponadto użyć dedykowanego SDK do PHP, pobieranego Composerem, który pozwala na łatwe odbieranie i wysyłanie danych do Salesforce. 

Integracje Drupala poprzez Zapier

Integracja z systemami poprzez Zapier to proces łączenia różnych aplikacji, narzędzi i systemów w celu automatyzacji zadań oraz przesyłania danych między nimi za pomocą wspomnianej platformy. Zapier umożliwia tworzenie reguł lub “zapów”, które określają, co ma się dziać, gdy zachodzi dane zdarzenie w jednym systemie i jakie akcje mają zostać podjęte w drugim.

Dlaczego integracja z Zapier jest przydatna i jakie niesie korzyści?

  • Proste i szybkie połączenie: Integracja z systemami za pomocą Zapier jest łatwa w konfiguracji i nie wymaga zaawansowanej wiedzy technicznej. Możemy tworzyć własne zapy, dostosowując je do swoich potrzeb w kilka minut.
  • Automatyzacja zadań: Zapier umożliwia automatyzację wielu zadań i procesów, co pozwala zaoszczędzić czas i uniknąć błędów ludzkich. Dzięki temu możemy skoncentrować się na bardziej strategicznych aspektach działalności.
  • Rozszerzona funkcjonalność: Dzięki obsłudze setek aplikacji i narzędzi, Zapier pozwala na tworzenie bardziej zaawansowanych i zintegrowanych rozwiązań. Możemy synchronizować dane, generować powiadomienia, tworzyć raporty i wiele innych, łącząc różne systemy w jedno spójne środowisko pracy.

Przykład prostej integracji Drupala z Excelem poprzez Zapier:

Dzięki platformie Zapier Drupala można zintegrować z różnymi aplikacjami, narzędziami i systemami.


Źródło: Zapier

Integracje Drupala - podsumowanie

Drupal to wysoce elastyczny system pod względem rozbudowy, oferujący nieograniczone możliwości integracji z innymi rozwiązaniami i narzędziami. Jako oprogramowanie open source, posiada szeroką gamę modułów integracyjnych dostępnych na Drupal.org, które pozwalają na łączenie witryny z różnymi aplikacjami, w tym CRM, e-commerce, mediami społecznościowymi etc.

Dzięki własnemu API i komponentom Symfony, Drupal umożliwia tworzenie niestandardowych integracji, zapewniając pełną kontrolę nad procesem komunikacji między systemami. Ochrona danych jest priorytetem, a Drupal dba o zachowanie najwyższych standardów bezpieczeństwa podczas integracji. Jeśli potrzebujesz pomocy z tym narzędziem do tworzenia spersonalizowanych i zintegrowanych witryn internetowych, skorzystaj ze wsparcia doświadczonej agencji drupalowej. 

3. Najlepsze praktyki zespołów programistycznych