संसाधनों का अनुकूलन
कुछ साइटें कुछ JSON:API संसाधन प्रकार (resource types) या फ़ील्ड्स को एक्सपोज़ नहीं करना चाहेंगी, या एक स्वच्छ इंटरफ़ेस देने के लिए फ़ील्ड्स का नाम बदलना चाहेंगी।
इन परिवर्तनों की अनुमति देने के लिए, JSON:API इवेंट नाम ResourceTypeBuildEvents::BUILD
का उपयोग करते हुए एक ResourceTypeBuildEvent
इवेंट ऑब्जेक्ट डिस्पैच करता है। इन इवेंट्स का उपयोग कैसे करें, इसके लिए कृपया इवेंट्स को सब्सक्राइब और डिस्पैच करना देखें।
सब्सक्राइबर्स निम्न मेथड्स को कॉल कर सकते हैं:
ResourceTypeBuildEvent::disableResourceType()
— किसी संसाधन प्रकार को JSON:API के माध्यम से किसी भी तरह से एक्सेस होने से रोकने के लिए।ResourceTypeBuildEvent::disableField()
— किसी फ़ील्ड को JSON:API के माध्यम से किसी भी तरह से एक्सेस होने से रोकने के लिए।ResourceTypeBuildEvent::setPublicFieldName()
— किसी फ़ील्ड के लिए उपनाम (alias) सेट करने हेतु ताकि JSON:API आंतरिक Drupal फ़ील्ड नाम को एक्सपोज़ न करे।ResourceTypeBuildEvent::setResourceTypeName()
— किसी संसाधन के लिए उपनाम सेट करने हेतु ताकि JSON:API आंतरिक Drupal संसाधन नाम को एक्सपोज़ न करे।
कोई भी मॉड्यूल—कस्टम या कॉन्ट्रिब—इस इवेंट के लिए एक सब्सक्राइबर लागू कर सकता है। इसका मतलब है कि किसी विशेष साइट के लिए बना मॉड्यूल संसाधन प्रकारों को डिसेबल कर सकता है और यह भी कि जो मॉड्यूल अपने स्वयं के एंटिटी प्रकार प्रदान करते हैं वे अपनी ही JSON:API प्रतिनिधियों (representations) को डिसेबल कर सकते हैं।
उदाहरण
नीचे एक EventSubscriber
का उदाहरण दिया गया है जो दर्शाता है कि आप कौन-कौन सी संभावित कार्रवाइयाँ कर सकते हैं।
<?php
namespace Drupal\modules\custom\resource_types\EventSubscriber;
use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvents;
use Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* कुछ संसाधन प्रकार बदलने के लिए इवेंट सब्सक्राइबर।
*/
class ResourceTypeBuildEventSubscriber implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
return [
ResourceTypeBuildEvents::BUILD => [
['disableResourceType'],
['aliasResourceTypeFields'],
['disableResourceTypeFields'],
['renameResourceType'],
],
];
}
/**
* node/page संसाधन प्रकार को डिसेबल करता है।
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* बिल्ड इवेंट।
*/
public function disableResourceType(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--page') {
$event->disableResourceType();
}
}
/**
* body फ़ील्ड का उपनाम 'content' सेट करता है।
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* बिल्ड इवेंट।
*/
public function aliasResourceTypeFields(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
foreach ($event->getFields() as $field) {
if ($field->getInternalName() === 'body') {
$event->setPublicFieldName($field, 'content');
}
}
}
}
/**
* node--article पर sticky फ़ील्ड को डिसेबल करता है।
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* बिल्ड इवेंट।
*/
public function disableResourceTypeFields(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
foreach ($event->getFields() as $field) {
if ($field->getInternalName() === 'sticky') {
$event->disableField($field);
}
}
}
}
/**
* node--article को article नाम देता है, संसाधन को /jsonapi/article के रूप में एक्सपोज़ करता है।
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeBuildEvent $event
* बिल्ड इवेंट।
*/
public function renameResourceType(ResourceTypeBuildEvent $event) {
if ($event->getResourceTypeName() === 'node--article') {
$event->setResourceTypeName('article');
}
}
}
JSON:API एक्स्ट्राज़
इसमें से कुछ कार्यक्षमता JSON:API Extras में भी उपलब्ध है। यह मॉड्यूल जहाँ संभव हो कोर की कार्यक्षमता का उपयोग करने की कोशिश करता है, लेकिन एक इंटरफ़ेस और कुछ अतिरिक्त फ़ीचर्स प्रदान करता है, जैसे:
- API के base path में परिवर्तन करना।
- फ़ील्ड्स पर एन्हांसर्स जोड़ना।
- डिफ़ॉल्ट रूप से संसाधनों को डिसेबल करना।
मॉड्यूल सक्षम करने के बाद आप /admin/config/services/jsonapi पर जा सकते हैं, जहाँ JSON:API द्वारा एक्सपोज़ की गई सभी कॉन्फ़िगरेशन और कंटेंट की सूची देख सकते हैं।
लेख स्रोत: Drupal Documentation.