Erstellung einer benutzerdefinierten REST-Ressource für die GET-Methode in Drupal 8
AI-TranslatedIn einer zunehmend vernetzten Welt müssen auch Webtechnologien miteinander verbunden sein. RESTful Web Services können als Programmierschnittstelle verwendet werden, um verschiedene Dienste zu verbinden.
Dies wird durch die Verwendung von HTTP-Anfragen zum GET, PUT, POST und DELETE von Daten ermöglicht. Es basiert auf der Technologie des Representational State Transfer (REST), einem Architekturstil und einem Kommunikationsansatz, der häufig in der Webdienstentwicklung verwendet wird.
Da sich die entkoppelte Entwicklung immer weiter durchsetzt, ist es für Entwickler wichtig, die REST-Technologie besser zu verstehen. Drupal bietet seinen Entwicklern eine interne Methode zur Nutzung dieser REST-Technologie. Das Modul RESTful Web Services, das jetzt Teil des Drupal-Kerns ist, stellt seinen Entwicklern REST-Dienste zur Verfügung.
Es ermöglicht Benutzern, Daten auf der Website zu lesen oder zu aktualisieren.
Verschiedene Verben oder Anfragemethoden, die für den Ansatz verwendet werden, sind:
GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT und PATCH
Die GET-Methode ermöglicht dem Benutzer den Zugriff auf verschiedene Entitäten wie Node, User, Taxonomy, Comments und sogar Watchdog-Datenbankprotokolleinträge. Die GET-Methode ist eine SICHERE Methode, da keine Datenbankmanipulation erfolgt, sondern es sich um eine schreibgeschützte Anfrage handelt.
Im Gegensatz zu GET findet bei der POST-Methode eine Datenbankmanipulation statt. Der Benutzer kann die Datenbank aktualisieren und bei Bedarf einen Knoten erstellen.
Erstellen von REST-Ressourcen-Plugins
REST-Ressourcen-Plugins sind wichtig, um zusätzliche Ressourcen über REST bereitzustellen. In den folgenden Schritten erstellen wir ein einfaches Beispiel zum Verständnis der grundlegenden Funktionalität der Entwicklung eines REST-Ressourcen-Endpunkts, der einen Inhaltstyp als Argument entgegennimmt und Titel und Knoten-IDs aller Knoten dieses bestimmten Inhaltstyps zurückgibt.
- Erstellen Sie den Staging-Code für die REST-Ressource mit dem folgenden Drupal-Konsolenbefehl:
drupal generate:plugin:rest:resource
Sie können den Staging-Code auch manuell generieren, indem Sie eine Plugin-Datei unter src im benutzerdefinierten Modul > Plugin > Rest > Resource > {ResourceClassName}.php erstellen.
Definieren Sie als Nächstes den Namespace, die Abhängigkeiten und die Plugin-Klasse, wie im folgenden Beispiel gezeigt.
-
Als Nächstes müssen Sie die @RestResource-Annotation erstellen. Sie hilft Ihnen, die Abhängigkeiten und den Status der Klasse anzugeben. Ein weiterer wichtiger Punkt ist, dass die URL-Zuordnung zwischen Groß- und Kleinschreibung unterscheidet.
Wir müssen auch auf die urli_paths der @RestResource-Annotation achten, die Link-Beziehungstypen als Schlüssel und partielle URIs als Werte akzeptieren. Wenn Sie keine angeben, generiert Drupal automatisch URI-Pfade (und damit URLs) basierend auf der Plugin-ID.
Wenn Ihre Plugin-ID rest_example ist, erhalten Sie /rest_example/{id} für GET|PATCH|DELETE und /rest_example für POST. Aber oft möchten Sie Ihre eigenen Pfade angeben: einen kanonischen URI-Pfad (z. B. /todo/{todo_id}). Zum Beispiel:
* uri_paths = {
* "canonical" = "/rest_example/{id}",
* }
Hier erfahren Sie, wie Sie die vollständige REST-Ressourcen-GET-Anfrage erhalten
<?php
namespace Drupal\rest_example\Plugin\rest\resource;
use Drupal\rest\ModifiedResourceResponse;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
/**
* Provides a resource to get view modes by entity and bundle.
*
* @RestResource(
* id = "rest_example",
* label = @Translation("Rest example"),
* uri_paths = {
* "canonical" = "/rest/api/get/node/{type}"
* }
* )
*/
class RestExample extends ResourceBase {
/**
* Responds to GET requests.
*
* @return \Drupal\rest\ResourceResponse
* The HTTP response object.
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* Throws exception expected.
*/
public function get($type = NULL) {
// You must to implement the logic of your REST Resource here.
// Use current user after pass authentication to validate access.
if (!(\Drupal::currentUser)->hasPermission('access content')) {
throw new AccessDeniedHttpException();
}
if($type) {
$nids = \Drupal::entityQuery('node')->condition('type',$type)->execute();
if($nids){
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);
foreach ($nodes as $key => $value) {
$data[] = ['id' => $value->id(),'title' => $value->getTitle()];
}
}
}
$response = new ResourceResponse($data);
// In order to generate fresh result every time (without clearing
// the cache), you need to invalidate the cache.
$response->addCacheableDependency($data);
return $response;
}
}
Ausgabe
[
{
"id": "67",
"title": "Consectetuer Sits"
},
{
"id": "69",
"title": "Eum Paulatim"
},
{
"id": "70",
"title": "Tation"
}
]
Konfigurieren der REST-Ressourcen
In der Konfigurationsdatei definieren wir, welche HTTP-Methode, welches Serialisierungsformat und welcher Authentifizierungsmechanismus vom Plugin unterstützt werden.
Diese Konfigurationsdatei ist erforderlich, um das REST-Ressourcen-Plugin zu verwenden. Es gibt zwei Möglichkeiten, das REST-Ressourcen-Plugin @RestResource zu konfigurieren:
- REST UI-Modul
- Das REST UI-Modul ist nicht Teil des Kerns. Sie müssen es also herunterladen und wie jedes andere Modul in Ihrer Drupal-Site installieren.
- Gehen Sie nach der Installation zu /admin/config/services/rest und aktivieren Sie Ihre REST-Ressource.
- Wählen Sie Ihre gewünschten Einstellungen aus. Um das hal_json-Format zu erhalten, können Sie das HAL-Modul von Drupal Core aktivieren.
- Das REST UI-Modul ist nicht Teil des Kerns. Sie müssen es also herunterladen und wie jedes andere Modul in Ihrer Drupal-Site installieren.
- Manuell
- Gehen Sie zum Konfigurationsverzeichnis und erstellen Sie eine Konfigurationsdatei mit dem Namen rest.resource.{resource id}.yml.
- Fügen Sie den folgenden Inhalt hinzu.
langcode: en
status: true
dependencies:
module:
- rest_example
- serialization
- user
id: rest_example
plugin_id: rest_example
granularity: resource
configuration:
methods:
- GET
formats:
- json
authentication:
- cookie
- Speichern Sie diese Datei als rest.resource.plugin_id.yml (in diesem Fall rest.resource.rest_example.yml) in Ihrem Konfigurationsverzeichnis und führen Sie die Konfigurationssynchronisierung aus.
Definieren Ihrer Ressourcenkonfiguration:
Status: true/false (aktivieren oder deaktivieren) Id: eindeutige ID Plugin_id: eindeutige ID configuration=>methods: Nennen Sie alle Anfragemethoden, die Sie in diesem Plugin verwenden möchten configuration=>formats: Definieren Sie alle unterstützten serialisierten Formate configuration=>authentication: Nennen Sie alle unterstützten Authentifizierungsmethoden. Standardmäßig unterstützt das REST-Modul JSON und XML
Wichtiger Punkt: Jede REST-Ressource muss mit der Annotation @RestResource versehen sein, damit sie vom Modul RESTful Web Services erkannt werden kann.
Benutzerdefinierte REST-APIs sind nützlich, um Daten an Anwendungen von Drittanbietern und für Headless-Architekturen zu senden. Heutzutage gibt es kaum ein Projekt oder eine Anwendung, die keine REST-API hat. Kontaktieren Sie uns unter [email protected], damit wir Ihnen bei der Erstellung helfen können
Abonnieren
Verwandte Blogs
Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

„Fit. Schnell. Für die Ewigkeit gebaut.“ Das war nicht nur ein Slogan, sondern die Denkweise, mit der wir zur DrupalCon…
Erklärbare KI-Tools: SHAPs Stärke in der KI

Wissen Sie, was erklärbare KI-Tools sind? Erklärbare KI-Tools sind Programme, die zeigen, wie eine KI ihre Entscheidungen…
KI-Chatbots: Präzision und Persönlichkeit in Perfektion

In der Welt der künstlichen Intelligenz ist die Entwicklung eines KI-Chatbots, der nicht nur akkurate Informationen liefert…