You are here

rest.module in Drupal 8

Same filename and directory in other branches
  1. 9 core/modules/rest/rest.module
  2. 10 core/modules/rest/rest.module

RESTful web services module.

File

core/modules/rest/rest.module
View source
<?php

/**
 * @file
 * RESTful web services module.
 */
use Drupal\Core\Url;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\views\ViewEntityInterface;

/**
 * Implements hook_help().
 */
function rest_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    case 'help.page.rest':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('The RESTful Web Services module provides a framework for exposing REST resources on your site. It provides support for content entity types such as the main site content, comments, custom blocks, taxonomy terms, and user accounts, etc. (see the <a href=":field">Field module help page</a> for more information about entities). REST support for content items of the Node module is enabled by default, and support for other types of content entities can be enabled. Other modules may add support for other types of REST resources. For more information, see the <a href=":rest">online documentation for the RESTful Web Services module</a>.', [
        ':rest' => 'https://www.drupal.org/documentation/modules/rest',
        ':field' => \Drupal::moduleHandler()
          ->moduleExists('field') ? Url::fromRoute('help.page', [
          'name' => 'field',
        ])
          ->toString() : '#',
      ]) . '</p>';
      $output .= '<h3>' . t('Uses') . '</h3>';
      $output .= '<dl>';
      $output .= '<dt>' . t('Installing supporting modules') . '</dt>';
      $output .= '<dd>' . t('In order to use REST on a web site, you need to install modules that provide serialization and authentication services. You can use the Core module <a href=":hal">HAL</a> for serialization and <a href=":basic_auth">HTTP Basic Authentication</a> for authentication, or install a contributed or custom module.', [
        ':hal' => \Drupal::moduleHandler()
          ->moduleExists('hal') ? Url::fromRoute('help.page', [
          'name' => 'hal',
        ])
          ->toString() : 'https://www.drupal.org/docs/8/core/modules/hal/overview',
        ':basic_auth' => \Drupal::moduleHandler()
          ->moduleExists('basic_auth') ? Url::fromRoute('help.page', [
          'name' => 'basic_auth',
        ])
          ->toString() : 'https://www.drupal.org/docs/8/core/modules/basic_auth/overview',
      ]) . '</dd>';
      $output .= '<dt>' . t('Enabling REST support for an entity type') . '</dt>';
      $output .= '<dd>' . t('REST support for content types (provided by the <a href=":node">Node</a> module) is enabled by default. To enable support for other content entity types, you can use a <a href=":config" target="blank">process based on configuration editing</a> or the contributed <a href=":restui">REST UI module</a>.', [
        ':node' => \Drupal::moduleHandler()
          ->moduleExists('node') ? Url::fromRoute('help.page', [
          'name' => 'node',
        ])
          ->toString() : '#',
        ':config' => 'https://www.drupal.org/documentation/modules/rest',
        ':restui' => 'https://www.drupal.org/project/restui',
      ]) . '</dd>';
      $output .= '<dd>' . t('You will also need to grant anonymous users permission to perform each of the REST operations you want to be available, and set up authentication properly to authorize web requests.') . '</dd>';
      $output .= '<dt>' . t('General') . '</dt>';
      $output .= '<dd>' . t('The <a href=":rest-docs">RESTful Web Services</a> and <a href=":jsonapi-docs">JSON:API</a> modules serve similar purposes. <a href=":comparison">Read the comparison of the RESTFul Web Services and JSON:API modules</a> to determine the best choice for your site.', [
        ':rest-docs' => 'https://www.drupal.org/docs/8/core/modules/rest',
        ':jsonapi-docs' => 'https://www.drupal.org/docs/8/modules/json-api',
        ':comparison' => 'https://www.drupal.org/docs/8/modules/jsonapi/jsonapi-vs-cores-rest-module',
      ]) . '</dd>';
      $output .= '</dl>';
      return $output;
  }
}

/**
 * Implements hook_ENTITY_TYPE_presave().
 *
 * @see rest_update_8401()
 */
function rest_view_presave(ViewEntityInterface $view) {

  // Fix the auth options on import, much like what rest_update_8401() does.
  $auth_providers = \Drupal::service('authentication_collector')
    ->getSortedProviders();
  $process_auth = function ($auth_option) use ($auth_providers) {
    foreach ($auth_providers as $provider_id => $provider_data) {

      // The provider belongs to the module that declares it as a service.
      if (strtok($provider_data->_serviceId, '.') === $auth_option) {
        return $provider_id;
      }
    }
    return $auth_option;
  };
  foreach (array_keys($view
    ->get('display')) as $display_id) {
    $display =& $view
      ->getDisplay($display_id);
    if ($display['display_plugin'] === 'rest_export' && !empty($display['display_options']['auth'])) {
      $display['display_options']['auth'] = array_map($process_auth, $display['display_options']['auth']);
    }
  }
}

Functions

Namesort descending Description
rest_help Implements hook_help().
rest_view_presave Implements hook_ENTITY_TYPE_presave().