最近在研究drupal8的restful相关,在drupal8中已经自带了restful的功能,你只需要启动这四个模块:

完成安装之后,基本的restful功能即可实现,比如我想获取node的数据,就可使用http://example.com/node/{node}?_format=hal_json来获取node的基本信息。但是某些时候drupal自带的rest resource无法满足我们,这个时候就需要我们自己来手动创建rest resource了,这里有两种方法,一种是通过view来创建,另一种就是通过代码来实现。
1.通过view实现
通过view方法很简单,就是在创建视图的时候选择提供rest导入即可。如下图:

然后写入API路径,如api/compamy/get;最后进行view的设置(这里关于view的设置就不多说了)。我们使用postman来进行测试,结果如下:

这就是一个简单的通过view设置rest source的方法。
2.通过代码设置
长话短说,现在我们下来实现一个简单的通过给方式获取node信息的rest resource。
1.在your_moule/src/Plugin/目录下新建rest/resource目录,然后新建你的rest resource文件,如图:

废话不多说,直接上代码:
<?php
/**
* @files
* Contains \Drupal\web_index\src\Plugin\rest\resource
*/
namespace Drupal\web_index\Plugin\rest\resource;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Drupal\node\Entity\Node;
use Drupal\user\Entity\User;
/**
* 自定义rest接口
*
* @RestResource(
* id = "custom_resource",
* label = @Translation("自定义rest接口"),
* uri_paths = {
* "canonical" = "/api/node/{nid}"
* }
* )
*/
class CustomResource extends ResourceBase {
public function get($nid = null) {
if($nid && is_numeric($nid)) {
$node = Node::load($nid);
if(!empty($node)) {
$array = array(
'title' => $node->getTitle(),
'user' => User::load($node->getOwnerId())->getAccountName()
);
} else {
$array = array('参数错误');
}
} else {
$array = array('参数错误');
}
return new ResourceResponse($array);
}
}
这里的关键是注释部分:
id:就是你rest resource的机读名,安装REST UI模块后能在后台看到。
label:描述信息
uri_path:关于rest resource的一些定义。其中canonical就是你这个rest resource的API了
有了这些之后,还需要定义方法来实现逻辑才行,这里我用的是get方法。
最后我们来测试一下:

以上就是我关于drupal8的自定义restsource的方法,如果有不对的地方,欢迎在drupal1群随时探讨