Prilagođavanje resursa
Neki sajtovi možda neće želeti da izlože određene JSON:API tipove resursa ili polja, ili žele da preimenuju polja radi čistijeg interfejsa.
Da bi omogućio ove izmene, JSON:API emituje objekat događaja ResourceTypeBuildEvent
koristeći ime događaja ResourceTypeBuildEvents::BUILD
. Molimo pogledajte kako se pretplatiti na događaje i emitovati ih za više informacija.
Pretplatnici mogu pozvati sledeće metode:
ResourceTypeBuildEvent::disableResourceType()
da sprečite pristup tipu resursa na bilo koji način putem JSON:API.ResourceTypeBuildEvent::disableField()
da sprečite pristup određenom polju putem JSON:API.ResourceTypeBuildEvent::setPublicFieldName()
da podesite alias polja tako da JSON:API ne izlaže interno Drupal ime polja.ResourceTypeBuildEvent::setResourceTypeName()
da podesite alias resursa tako da JSON:API ne izlaže interno ime resursa.
Bilo koji modul, prilagođeni ili doprinosni, može implementirati pretplatnika za ovaj događaj. To znači da modul za određeni sajt može onemogućiti tipove resursa, kao i da moduli koji pružaju svoje entitetske tipove mogu onemogućiti sopstvene JSON:API reprezentacije.
Primer
U nastavku je prikazan primer EventSubscriber
klase sa svim mogućim akcijama koje možete preduzeti:
<?php
namespace Drupal\modules\custom\resource_types\EventSubscriber;
use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvents;
use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Pretplatnik događaja za izmenu određenih tipova resursa.
*/
class ResourceTypeBuildEventSubscriber implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
return [
ResourceTypeBuildEvents::BUILD => [
['disableResourceType'],
['aliasResourceTypeFields'],
['disableResourceTypeFields'],
['renameResourceType'],
],
];
}
/**
* Onemogućava node/page tip resursa.
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* Događaj izgradnje.
*/
public function disableResourceType(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--page') {
$event->disableResourceType();
}
}
/**
* Daje alias "content" za polje "body".
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* Događaj izgradnje.
*/
public function aliasResourceTypeFields(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
foreach ($event->getFields() as $field) {
if ($field->getInternalName() === 'body') {
$event->setPublicFieldName($field, 'content');
}
}
}
}
/**
* Onemogućava polje "sticky" na node--article.
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* Događaj izgradnje.
*/
public function disableResourceTypeFields(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
foreach ($event->getFields() as $field) {
if ($field->getInternalName() === 'sticky') {
$event->disableField($field);
}
}
}
}
/**
* Preimenuje node--article u article, izlažući resurs kao /jsonapi/article
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* Događaj izgradnje.
*/
public function renameResourceType(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
$event->setResourceTypeName('article');
}
}
}
JSON:API Extras
Neke od ovih funkcionalnosti omogućava i JSON:API Extras. Ovaj modul koristi core funkcionalnost gde god je to moguće, ali nudi i interfejs i dodatne opcije kao što su:
- Izmena osnovne putanje ka API-ju.
- Dodavanje enhancera (poboljšivača) na polja.
- Onemogućavanje resursa po default-u.
Nakon što omogućite modul, možete posetiti /admin/config/services/jsonapi da vidite listu svih konfiguracija i sadržaja koje JSON:API izlaže.
Članak sa Drupal Dokumentacije.