नए संसाधन बनाना (POST)
यह पृष्ठ JSON:API मॉड्यूल के लिए विभिन्न POST अनुरोधों के उदाहरण दिखाता है।
POST अनुरोधों का उपयोग नए संसाधन बनाने के लिए किया जाता है। यदि आपको संसाधनों को संशोधित करने की आवश्यकता है, तो आपको उन्हें PATCH करना होगा।
JSON:API स्पेसिफिकेशन (और इसलिए JSON:API मॉड्यूल) केवल प्रत्येक POST अनुरोध पर एक ही संसाधन बनाने का समर्थन करता है। Drupal के लिए, इसका अर्थ है कि केवल इस मॉड्यूल से एक अनुरोध में कई entities बनाना संभव नहीं है। आप ऐसा तब करना चाह सकते हैं जब आप parent entity के साथ-साथ संदर्भित entities भी बनाना चाहते हों। जबकि JSON:API इस व्यवहार का समर्थन नहीं कर सकता, लेकिन Subrequests जैसे मॉड्यूल इन आवश्यकताओं में मदद कर सकते हैं।
क्रिएट (Create) ऑपरेशन सक्षम करना
/admin/config/services/jsonapi पर जाएँ
और "Accept all JSON:API create, read, update, and delete operations." विकल्प को चुनें।

प्रमाणीकरण (Authentication)
आमतौर पर POST अनुरोधों के लिए किसी प्रकार का प्रमाणीकरण उपयोग किया जाता है। नीचे दिए गए उदाहरण सभी Basic Authentication का उपयोग करते हैं, जिसमें वेबसाइट पर मौजूदा उपयोगकर्ता का उपयोगकर्ता नाम और पासवर्ड उपयोग किया जाता है, जिसके पास दी गई सामग्री बनाने की अनुमति होती है।
HTTP Basic Authentication (basic_auth
) मॉड्यूल सक्षम करें, API उपयोगकर्ता (और भूमिका) के लिए अनुमति सेट करें और 'Authorization' अनुरोध हेडर में एन्कोड किया हुआ यूज़रनेम और पासवर्ड सेट करें।
इस पृष्ठ के उदाहरण हेडर के लिए Drupal उपयोगकर्ता नाम 'api' और पासवर्ड 'api' आवश्यक है।
हेडर
सही JSON:API अनुरोध और प्रतिक्रिया प्राप्त करने के लिए सभी POST अनुरोधों पर निम्नलिखित हेडर अनिवार्य हैं:
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
उदाहरणों के काम करने के लिए निम्नलिखित हेडर की आवश्यकता है:
Authorization: Basic YXBpOmFwaQ==
Curl
मान लें कि आपका डेटा payload.json
फ़ाइल में है।
curl \
--user api:api \
--header 'Accept: application/vnd.api+json' \
--header 'Content-type: application/vnd.api+json' \
--request POST http://drupal.d8/jsonapi/node/article \
--data-binary @payload.json
बेसिक POST अनुरोध
URL: http://example.com/jsonapi/node/article
अनुरोध बॉडी
{
"data": {
"type": "node--article",
"attributes": {
"title": "मेरा कस्टम शीर्षक",
"body": {
"value": "कस्टम वैल्यू",
"format": "plain_text"
}
}
}
}
प्रतिक्रिया
HTTP 201 (Created) प्रतिक्रिया। प्रतिक्रिया बॉडी में बनाई गई entity का JsonApi उत्तर होता है।
संबंधों (relationships) के साथ POST अनुरोध
URL: http://example.com/jsonapi/node/article
Entity reference फ़ील्ड्स को attributes
के रूप में नहीं बल्कि relationships
के रूप में सेट करना चाहिए। यदि आप ऐसा नहीं करते हैं, तो आपको यह त्रुटि संदेश दिखाई देगा: "The following relationship fields were provided as attributes" और उसके बाद उन फ़ील्ड्स की सूची।
id
कुंजी में entity का UUID (न कि ID) होना चाहिए; उदाहरण: faba301b-bdf5-4658-abc1-e173b815984f
।
अनुरोध बॉडी
{
"data": {
"type": "node--article",
"attributes": {
"title": "एडमिन द्वारा लेख",
"body": {
"value": "कस्टम वैल्यू",
"format": "plain_text"
}
},
"relationships": {
"uid": {
"data": {
"type": "user--user",
"id": "{{UUID of user 1}}"
}
},
"field_taxonomy_term_reference": {
"data": {
"type": "taxonomy_term--{{bundle}}",
"id": "{{UUID of the term}}"
}
}
}
}
}
प्रतिक्रिया
HTTP 201 (Created) प्रतिक्रिया। प्रतिक्रिया बॉडी में बनाई गई entity का JsonApi उत्तर होता है।
Rest API का उपयोग करके POST विधि
सबसे पहले एक कस्टम मॉड्यूल बनाएँ जिसमें rest resource हो और इसे सक्षम करने के लिए /admin/config/services/rest पर जाएँ।
<?php
namespace Drupal\rest_examples\Plugin\rest\resource;
use Drupal\node\Entity\Node;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Drupal\Core\Session\AccountProxyInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
/**
* Provides a resource to post nodes.
*
* @RestResource(
* id = "rest_resource_post_example",
* label = @Translation("Rest Resource Post Example"),
* uri_paths = {
* "create" = "/rest/api/post/node-create"
* }
* )
*/
class RestResourcePostExample extends ResourceBase {
use StringTranslationTrait;
/**
* A current user instance.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected $currentUser;
/**
* Constructs a Drupal\rest\Plugin\ResourceBase object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param array $serializer_formats
* The available serialization formats.
* @param \Psr\Log\LoggerInterface $logger
* A logger instance.
* @param \Drupal\Core\Session\AccountProxyInterface $current_user
* A current user instance.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, AccountProxyInterface $current_user) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
$this->currentUser = $current_user;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->getParameter('serializer.formats'),
$container->get('logger.factory')->get('rest_examples'),
$container->get('current_user')
);
}
/**
* Responds to POST requests.
*
* Creates a new node.
*
* @param mixed $data
* Data to create the node.
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* Throws exception expected.
*/
public function post($data) {
// प्रमाणीकरण पास करने के बाद वर्तमान उपयोगकर्ता का उपयोग एक्सेस सत्यापित करने के लिए करें।
if (!$this->currentUser->hasPermission('administer site content')) {
// डिफ़ॉल्ट एक्सेस डिनाइड पेज दिखाएँ।
throw new AccessDeniedHttpException('Access Denied.');
}
foreach ($data as $key => $value) {
$node = Node::create(
[
'type' => $value['nodetype'],
'title' => $value['title'],
'body' => [
'summary' => '',
'value' => $value['body'],
'format' => 'full_html',
],
]
);
$node->enforceIsNew();
$node->save();
$this->logger->notice($this->t("Node with nid @nid saved!\n", ['@nid' => $node->id()]));
$nodes[] = $node->id();
}
$message = $this->t("New Nodes Created with nids : @message", ['@message' => implode(",", $nodes)]);
return new ResourceResponse($message, 200);
}
}
Nodes बनाने के लिए JSON सैंपल डेटा :
[
{
"nodetype": "article",
"title": "Training",
"body": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.\n\nEtiam vel augue. Vestibulum rutrum rutrum neque. Aenean auctor gravida sem.\n\nPraesent id massa id nisl venenatis lacinia. Aenean sit amet justo. Morbi ut odio."
},
{
"nodetype": "page",
"title": "Team Building",
"body": "Integer tincidunt ante vel ipsum. Praesent blandit lacinia erat. Vestibulum sed magna at nunc commodo placerat.\n\nPraesent blandit. Nam nulla. Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.\n\nMorbi porttitor lorem id ligula. Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem."
},
{
"nodetype": "article",
"title": "Services",
"body": "Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.\n\nAenean lectus. Pellentesque eget nunc. Donec quis orci eget orci vehicula condimentum.\n\nCurabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est."
},
{
"nodetype": "page",
"title": "Product Management",
"body": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo. In blandit ultrices enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n\nProin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.\n\nAenean lectus. Pellentesque eget nunc. Donec quis orci eget orci vehicula condimentum."
},
{
"nodetype": "article",
"title": "Business Development",
"body": "Nullam porttitor lacus at turpis. Donec posuere metus vitae ipsum. Aliquam non mauris.\n\nMorbi non lectus. Aliquam sit amet diam in magna bibendum imperdiet. Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.\n\nFusce posuere felis sed lacus. Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl. Nunc rhoncus dui vel sem."
}
]
POST अनुरोध करने के लिए Curl Command :
curl \
--user uname:password \
--header 'Accept: application/json' \
--header 'Content-type: application/json' \
--request POST http://example.com/rest/api/post/node-create \
--data-binary @post_data.json
लेख स्रोत: Drupal Documentation।