módulo

Creación de Endpoint personalizado (REST resource)

Por muchas razones puede ser necesario crear un endpoint para consumir alguna data, en este artículo listaremos todos los bloques habilitados en nuestro sitio web para poder consumirlo apuntando al endpoint.
 

El primer paso será crear un módulo personalizado (epsample), iniciaremos definiendo el archivo epsample/epsample.info.yml como punto importante en este paso es marcar la dependencia del módulo rest. Y claro, como podrán notar este módulo será compatible para drupal 9.
 

name: Custom example endpoint
type: module
description: 'Provides an example endpoint.' 
core_version_requirement: ^8 || ^9

dependencies:
  - rest

 

Luego vamos a definir el código esencial, definimos esta estructura de archivos epsample/src/Plugin/rest/resource/EndpointSampleResource.php

Es muy importante notar que la definición del namespace indique la estructura de directorios, que se usen las clases correspondientes y de igual forma la definición del id, label y uri_paths.

Acto seguido, en la clase EndpointSampleResource que extiende de ResourceBase escribiremos el código que se mostrará en el endpoint, debemos estar dentro del método get()

Añadimos el código que listará todos los bloques disponibles  para luego darle un formato más legible y retornarlo a la ruta.

<?php

namespace Drupal\epsample\Plugin\rest\resource;

use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
      
/**
  * Provides a endpoint example resource
  *
  * @RestResource (            
  *   id = "endpoint_sample_resource",
  *   label = @Translation("Endpoint Sample Resource"),
  *   uri_paths = {
  *     "canonical" = "/epsample/endpoint_sample_resource"
  *   }
  * )
 **/

class EndpointSampleResource extends ResourceBase {
  /**
   * Responds to entity GET requests.
   * @return \Drupal\rest\ResourceResponse
   */

  public function get() {
    $blockManager = \Drupal::service('plugin.manager.block');
    $contextRepository = \Drupal::service('context.repository');
    $definitions = $blockManager->getDefinitionsForContexts(
        $contextRepository->getAvailableContexts()
    );

    $definitionsArray = json_decode(json_encode($definitions), true);
    return new ResourceResponse($definitionsArray);
  }
}

 

Finalmente, creamos la siguiente estructura de archivos epsample/config/install/rest.resource.endpoint_sample_resource.yml como podrán notar aquí se enlazan con el id creado anteriormente, es importante considerar eso. También se define en método get disponible para el endpoint, así como el formato y la autenticación.

langcode: en
status: true
id: endpoint_sample_resource
plugin_id: endpoint_sample_resource
granularity: resource
configuration:
  methods:
    - GET
  formats:
    - json
  authentication:
    - cookie

 

Cumplido todo eso, solo queda instalar el módulo y visitar la url definida para el endpoint (la que definimos en el uri_paths)

endpoint image

 

Me pareció interesante el artículo

Deseo más información

O también puedes comunicarte con nosotros.

por whatsapp por whatsapp

Añadir nuevo comentario

Me gustaría más información sobre:

CAPTCHA