Uncategorized

How to create Custom Rest Resources for POST methods in Drupal 8

One of the biggest changes in Drupal 8 is the integration of Rest services in the core. With use of Views it become very easy to create RESTful Services.

But there are certain situations when you need to create your own custom REST Resources. There are documentations available for creating a GET request using Views and using custom module. However there isn’t much documentation available for creating Rest Resources for POST methods.

In this article I will be sharing, how to create a REST Resource for POST methods. This Rest API will create an article in Drupal 8 site from an external application.

Note: I will be using Drupal Console for generating the module and code boilerplates.

Create the module
drupal generate:module

module

 

Create the Rest Resource Plugin
drupal generate:plugin:rest:resource

rest

 

The above command will create a Plugin for rest resource in your module. The url /api/custom is the url for your resource which can be accessed like localhost:8000/api/custom?_format=json

Enable the resource from RestUI
rest UI

This was the easiest part.  Now we need to modify the Plugin created by Drupal Console to get the Resource working for POST methods.

<?php
/**
* @file
* Contains Drupal\custom_rest\Plugin\rest\resource\custom_rest.
*/
namespace Drupal\custom_rest\Plugin\rest\resource;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Psr\Log\LoggerInterface;
/**
* Provides a resource to get view modes by entity and bundle.
*
* @RestResource(
* id = “custom_rest_resource”,
* label = @Translation(“Custom rest resource”),
* uri_paths = {
* “canonical” = “//api/custom”
* }
* )
*/
class CustomRestResource extends ResourceBase {
/**
* 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’),
$container->get(‘current_user’)
);
}
/**
* Responds to POST requests.
*
* Returns a list of bundles for specified entity.
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* Throws exception expected.
*/
public function post() {
// You must to implement the logic of your REST Resource here.
// Use current user after pass authentication to validate access.
/*
if(!$this->currentUser->hasPermission($permission)) {
throw new AccessDeniedHttpException();
}
*/
// Throw an exception if it is required.
// throw new HttpException(t(‘Throw an exception if it is required.’));
return new ResourceResponse(“Implement REST State POST!”);
}
}
view rawCustomRest.php hosted with ❤ by GitHub

In the above file change the Annotation lines

*  uri_paths = {
*    “canonical” = “//api/custom”
*  }

To

*   uri_paths = {
*     “canonical” = “//api/custom”,
*     “drupal.org/link-relations/create” = “//api/custom”
*   }

Otherwise your API will be be expecting the request to use the /entity/{entity_type} endpoint, which will conflict with the endpoint provided by core.

Next we need a serializer class for normalising the data being passed.
Add serialization_class = “Drupal\node\Entity\Node”, in the Annotation for the Resource.
This will ensure that the data being passed is of entity type Node.

To run the resource use a Rest Client for example Advanced Rest Client.

advanced Rest Client

 

Click Here 4001
Click Here 4002
Click Here 4003
Click Here 4004
Click Here 4005
Click Here 4006
Click Here 4007
Click Here 4008
Click Here 4009
Click Here 4010
Click Here 4011
Click Here 4012
Click Here 4013
Click Here 4014
Click Here 4015
Click Here 4016
Click Here 4017
Click Here 4018
Click Here 4019
Click Here 4020
Click Here 4021
Click Here 4022
Click Here 4023
Click Here 4024
Click Here 4025
Click Here 4026
Click Here 4027
Click Here 4028
Click Here 4029
Click Here 4030
Click Here 4031
Click Here 4032
Click Here 4033
Click Here 4034
Click Here 4035
Click Here 4036
Click Here 4037
Click Here 4038
Click Here 4039
Click Here 4040
Click Here 4041
Click Here 4042
Click Here 4043
Click Here 4044
Click Here 4045
Click Here 4046
Click Here 4047
Click Here 4048
Click Here 4049
Click Here 4050
Click Here 4051
Click Here 4052
Click Here 4053
Click Here 4054
Click Here 4055
Click Here 4056
Click Here 4057
Click Here 4058
Click Here 4059
Click Here 4060
Click Here 4061
Click Here 4062
Click Here 4063
Click Here 4064
Click Here 4065
Click Here 4066
Click Here 4067
Click Here 4068
Click Here 4069
Click Here 4070
Click Here 4071
Click Here 4072
Click Here 4073
Click Here 4074
Click Here 4075
Click Here 4076
Click Here 4077
Click Here 4078
Click Here 4079
Click Here 4080
Click Here 4081
Click Here 4082
Click Here 4083
Click Here 4084
Click Here 4085
Click Here 4086
Click Here 4087
Click Here 4088
Click Here 4089
Click Here 4090
Click Here 4091
Click Here 4092
Click Here 4093
Click Here 4094
Click Here 4095
Click Here 4096
Click Here 4097
Click Here 4098
Click Here 4099
Click Here 4100
Click Here 4101
Click Here 4102
Click Here 4103
Click Here 4104
Click Here 4105
Click Here 4106
Click Here 4107
Click Here 4108
Click Here 4109
Click Here 4110
Click Here 4111
Click Here 4112
Click Here 4113
Click Here 4114
Click Here 4115
Click Here 4116
Click Here 4117
Click Here 4118
Click Here 4119
Click Here 4120
Click Here 4121
Click Here 4122
Click Here 4123
Click Here 4124
Click Here 4125
Click Here 4126
Click Here 4127
Click Here 4128
Click Here 4129
Click Here 4130
Click Here 4131
Click Here 4132
Click Here 4133
Click Here 4134
Click Here 4135
Click Here 4136
Click Here 4137
Click Here 4138
Click Here 4139
Click Here 4140
Click Here 4141
Click Here 4142
Click Here 4143
Click Here 4144
Click Here 4145
Click Here 4146
Click Here 4147
Click Here 4148
Click Here 4149
Click Here 4150
Click Here 4151
Click Here 4152
Click Here 4153
Click Here 4154
Click Here 4155
Click Here 4156
Click Here 4157
Click Here 4158
Click Here 4159
Click Here 4160
Click Here 4161
Click Here 4162
Click Here 4163
Click Here 4164
Click Here 4165
Click Here 4166
Click Here 4167
Click Here 4168
Click Here 4169
Click Here 4170
Click Here 4171
Click Here 4172
Click Here 4173
Click Here 4174
Click Here 4175
Click Here 4176
Click Here 4177
Click Here 4178
Click Here 4179
Click Here 4180
Click Here 4181
Click Here 4182
Click Here 4183
Click Here 4184
Click Here 4185
Click Here 4186
Click Here 4187
Click Here 4188
Click Here 4189
Click Here 4190
Click Here 4191
Click Here 4192
Click Here 4193
Click Here 4194
Click Here 4195
Click Here 4196
Click Here 4197
Click Here 4198
Click Here 4199
Click Here 4200
Click Here 4201
Click Here 4202
Click Here 4203
Click Here 4204
Click Here 4205
Click Here 4206
Click Here 4207
Click Here 4208
Click Here 4209
Click Here 4210
Click Here 4211
Click Here 4212
Click Here 4213
Click Here 4214
Click Here 4215
Click Here 4216
Click Here 4217
Click Here 4218
Click Here 4219
Click Here 4220
Click Here 4221
Click Here 4222
Click Here 4223
Click Here 4224
Click Here 4225
Click Here 4226
Click Here 4227
Click Here 4228
Click Here 4229
Click Here 4230
Click Here 4231
Click Here 4232
Click Here 4233
Click Here 4234
Click Here 4235
Click Here 4236
Click Here 4237
Click Here 4238
Click Here 4239
Click Here 4240
Click Here 4241
Click Here 4242
Click Here 4243
Click Here 4244
Click Here 4245
Click Here 4246
Click Here 4247
Click Here 4248
Click Here 4249
Click Here 4250
Click Here 4251
Click Here 4252
Click Here 4253
Click Here 4254
Click Here 4255
Click Here 4256
Click Here 4257
Click Here 4258
Click Here 4259
Click Here 4260
Click Here 4261
Click Here 4262
Click Here 4263
Click Here 4264
Click Here 4265
Click Here 4266
Click Here 4267
Click Here 4268
Click Here 4269
Click Here 4270
Click Here 4271
Click Here 4272
Click Here 4273
Click Here 4274
Click Here 4275
Click Here 4276
Click Here 4277
Click Here 4278
Click Here 4279
Click Here 4280
Click Here 4281
Click Here 4282
Click Here 4283
Click Here 4284
Click Here 4285
Click Here 4286
Click Here 4287
Click Here 4288
Click Here 4289
Click Here 4290
Click Here 4291
Click Here 4292
Click Here 4293
Click Here 4294
Click Here 4295
Click Here 4296
Click Here 4297
Click Here 4298
Click Here 4299
Click Here 4300
Click Here 4301
Click Here 4302
Click Here 4303
Click Here 4304
Click Here 4305
Click Here 4306
Click Here 4307
Click Here 4308
Click Here 4309
Click Here 4310
Click Here 4311
Click Here 4312
Click Here 4313
Click Here 4314
Click Here 4315
Click Here 4316
Click Here 4317
Click Here 4318
Click Here 4319
Click Here 4320
Click Here 4321
Click Here 4322
Click Here 4323
Click Here 4324
Click Here 4325
Click Here 4326
Click Here 4327
Click Here 4328
Click Here 4329
Click Here 4330
Click Here 4331
Click Here 4332
Click Here 4333
Click Here 4334
Click Here 4335
Click Here 4336
Click Here 4337
Click Here 4338
Click Here 4339
Click Here 4340
Click Here 4341
Click Here 4342
Click Here 4343
Click Here 4344
Click Here 4345
Click Here 4346
Click Here 4347
Click Here 4348
Click Here 4349
Click Here 4350
Click Here 4351
Click Here 4352
Click Here 4353
Click Here 4354
Click Here 4355
Click Here 4356
Click Here 4357
Click Here 4358
Click Here 4359
Click Here 4360
Click Here 4361
Click Here 4362
Click Here 4363
Click Here 4364
Click Here 4365
Click Here 4366
Click Here 4367
Click Here 4368
Click Here 4369
Click Here 4370
Click Here 4371
Click Here 4372
Click Here 4373
Click Here 4374
Click Here 4375
Click Here 4376
Click Here 4377
Click Here 4378
Click Here 4379
Click Here 4380
Click Here 4381
Click Here 4382
Click Here 4383
Click Here 4384
Click Here 4385
Click Here 4386
Click Here 4387
Click Here 4388
Click Here 4389
Click Here 4390
Click Here 4391
Click Here 4392
Click Here 4393
Click Here 4394
Click Here 4395
Click Here 4396
Click Here 4397
Click Here 4398
Click Here 4399
Click Here 4400
Click Here 4401
Click Here 4402
Click Here 4403
Click Here 4404
Click Here 4405
Click Here 4406
Click Here 4407
Click Here 4408
Click Here 4409
Click Here 4410
Click Here 4411
Click Here 4412
Click Here 4413
Click Here 4414
Click Here 4415
Click Here 4416
Click Here 4417
Click Here 4418
Click Here 4419
Click Here 4420
Click Here 4421
Click Here 4422
Click Here 4423
Click Here 4424
Click Here 4425
Click Here 4426
Click Here 4427
Click Here 4428
Click Here 4429
Click Here 4430
Click Here 4431
Click Here 4432
Click Here 4433
Click Here 4434
Click Here 4435
Click Here 4436
Click Here 4437
Click Here 4438
Click Here 4439
Click Here 4440
Click Here 4441
Click Here 4442
Click Here 4443
Click Here 4444
Click Here 4445
Click Here 4446
Click Here 4447
Click Here 4448
Click Here 4449
Click Here 4450
Click Here 4451
Click Here 4452
Click Here 4453
Click Here 4454
Click Here 4455
Click Here 4456
Click Here 4457
Click Here 4458
Click Here 4459
Click Here 4460
Click Here 4461
Click Here 4462
Click Here 4463
Click Here 4464
Click Here 4465
Click Here 4466
Click Here 4467
Click Here 4468
Click Here 4469
Click Here 4470
Click Here 4471
Click Here 4472
Click Here 4473
Click Here 4474
Click Here 4475
Click Here 4476
Click Here 4477
Click Here 4478
Click Here 4479
Click Here 4480
Click Here 4481
Click Here 4482
Click Here 4483
Click Here 4484
Click Here 4485
Click Here 4486
Click Here 4487
Click Here 4488
Click Here 4489
Click Here 4490
Click Here 4491
Click Here 4492
Click Here 4493
Click Here 4494
Click Here 4495
Click Here 4496
Click Here 4497
Click Here 4498
Click Here 4499
Click Here 4500

Related Articles

Leave a Reply

Back to top button