logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll

Նոր ռեսուրսների ստեղծում (POST)

18/05/2025, by Ivan

JSON Drop API Documentation

Այս էջում ներկայացված են տարբեր POST հարցումների օրինակներ JSON:API մոդուլի համար։

POST հարցումները օգտագործվում են նոր ռեսուրսներ ստեղծելու համար։ Եթե ցանկանում եք փոփոխել ռեսուրսները, պետք է օգտագործեք PATCH հարցումներ։

JSON:API սպեցիֆիկացիան (իսկ հետևաբար՝ JSON:API մոդուլը) աջակցում է միայն մեկ ռեսուրսի ստեղծում POST հարցման միջոցով։ Drupal-ում դա նշանակում է, որ մեկ հարցումով հնարավոր չէ ստեղծել բազմաթիվ էակներ։ Եթե ցանկանում եք, օրինակ, միաժամանակ ստեղծել կապակցված էակները՝ որպես ծնող էակի մաս, ապա JSON:API-ով դա հնարավոր չէ, բայց այդ նպատակով կարող եք օգտագործել Subrequests մոդուլը։

Ստեղծման գործողության ակտիվացում

Անցեք /admin/config/services/jsonapi և ընտրեք "Accept all JSON:API create, read, update, and delete operations." տարբերակը։

Create, Read, Update, Delete methods
Միացնել Create, Read, Update, Delete մեթոդները

Ավտենտիֆիկացում

Սովորաբար POST հարցումների համար պահանջվում է ավտենտիֆիկացման որևէ ձև։ Ստորև ներկայացված բոլոր օրինակներում օգտագործվում է Basic Authentication՝ կայքում արդեն գոյություն ունեցող օգտվողի անունն ու գաղտնաբառը, որն ունի տվյալ բովանդակությունը ստեղծելու իրավունք։

Միացրեք HTTP Basic Authentication (basic_auth) մոդուլը, տվեք API օգտվողին (և դերին) անհրաժեշտ թույլտվություն և 'Authorization' հեդերում ավելացրեք base64-ով կոդավորված օգտվողի անունն ու գաղտնաբառը։

Այս էջի օրինակային հեդերում օգտագործվում է 'api' անունով և 'api' գաղտնաբառով Drupal օգտվող։

Հեդերներ

Բոլոր POST հարցումների համար պարտադիր են հետևյալ հեդերները՝ ճիշտ JSON:API հարցում և պատասխան ստանալու համար.

  • 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 հարցում

Հասցե՝ http://example.com/jsonapi/node/article

Հարցման մարմին

{
  "data": {
    "type": "node--article",
    "attributes": {
      "title": "My custom title",
      "body": {
        "value": "Custom value",
        "format": "plain_text"
      }
    }
  }
}

Պատասխան

HTTP 201 (Created) պատասխան։ Պատասխանի մարմնում՝ ստեղծված էակի JsonApi պատասխանը։

POST հարցում՝ հարաբերություններով

Հասցե՝ http://example.com/jsonapi/node/article

Էական հղման (entity reference) դաշտերը պետք է նշվեն relationships բաժնում, ոչ թե attributes-ում։ Եթե դա չկատարեք, կստանաք սխալի հաղորդագրություն՝ "The following relationship fields were provided as attributes": դաշտերի ցուցակով։

id դաշտում պետք է օգտագործել UUID-ն, ոչ թե ID-ն։ Օրինակ՝ faba301b-bdf5-4658-abc1-e173b815984f։

Հարցման մարմին

{
  "data": {
    "type": "node--article",
    "attributes": {
      "title": "Article by admin",
      "body": {
        "value": "Custom value",
        "format": "plain_text"
      }
    },
    "relationships": {
      "uid": {
        "data": {
          "type": "user--user",
          "id": "{{Օգտվողի UUID}}"
        }
      },
      "field_taxonomy_term_reference": {
        "data": {
          "type": "taxonomy_term--{{bundle}}",
          "id": "{{Տերմինի UUID}}"
        }
      }
    }
  }
}

Պատասխան

HTTP 201 (Created) պատասխան։ Պատասխանի մարմնում՝ ստեղծված էակի JsonApi պատասխանը։

POST մեթոդ՝ Rest API-ով

Նախ ստեղծեք ձեր սեփական մոդուլը, որտեղ կլինի 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;

  /**
   * {@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')
    );
  }

  /**
   * {@inheritdoc}
   */
  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);

  }

}

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."
    }
]

Curl հրաման՝ POST հարցում ուղարկելու համար՝

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։