上海戴文 - Drupal开发专家

你在这里

drupal8如何自定义rest resource

主标签

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

11.png

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

1.通过view实现

通过view方法很简单,就是在创建视图的时候选择提供rest导入即可。如下图:

22.png

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

66.png

这就是一个简单的通过view设置rest source的方法。

2.通过代码设置

长话短说,现在我们下来实现一个简单的通过给方式获取node信息的rest resource。

     1.在your_moule/src/Plugin/目录下新建rest/resource目录,然后新建你的rest resource文件,如图:

44.png

废话不多说,直接上代码:

<?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方法。

最后我们来测试一下:

55.png

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

标签: 
Drupal 版本: 

猜你喜欢