You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为包含Green、Red、White术语的分类法创建REST视图及端点

为分类法术语创建REST端点的分步指南

嘿,我来帮你搞定这个分类法REST端点的事儿!假设你用的是Drupal(毕竟它的分类法体系和原生REST支持完全适配你的需求),下面是一步步的实操步骤,帮你快速生成返回术语实体数组的REST端点:


1. 先启用必要的核心模块

首先得确保你的站点开了这些核心模块,不然REST功能跑不起来:

  • RESTful Web Services:核心的REST服务模块
  • Serialization:负责把实体数据转成JSON/XML的模块
  • Taxonomy:你已经在用的分类法模块
  • Basic Authentication:如果需要简单的身份验证,或者选你常用的认证方式(比如Cookie认证用于测试)

你可以直接在后台模块页面勾选启用,嫌麻烦的话用Drush命令一键搞定:

drush en rest serialization taxonomy basic_auth -y

2. 配置分类法术语的REST资源

接下来要把分类法术语设置成可通过REST访问的资源:

  • 后台路径走配置 > Web服务 > REST(或者直接访问/admin/config/services/rest)
  • 点击「添加资源」,选择Taxonomy term作为资源类型
  • 关键配置项别漏了:
    • 勾选「启用」
    • 支持的请求格式:选json(或者你需要的xml)
    • 支持的认证提供者:勾选你要用的(比如basic_auth,测试阶段选cookie也行)
    • 允许的请求方法:勾选GET(毕竟你是要获取术语列表)
  • 保存配置就OK了

3. 自定义输出字段(可选但推荐)

默认的REST输出会返回术语的所有字段,如果你只想返回关键数据(比如ID、名称、颜色值),可以配置实体显示模式:

  • 进入「结构 > 分类法 > 词汇表」,找到你的颜色词汇表(就是存Green/Red/White的那个),点击「管理显示」
  • 切换到REST export显示模式(要是没有的话,点「添加显示模式」新建一个)
  • 勾选你需要展示的字段,调整顺序后保存就行

4. 测试你的端点!

现在你可以直接用URL访问术语列表了:
获取所有分类法术语的端点:

/taxonomy/term?_format=json

如果只想拿你那个颜色词汇表的术语(假设词汇表的机器名是colors,或者vid是1),加个过滤参数:

/taxonomy/term?_format=json&vid=colors

返回的JSON大概是这样的(示例):

[
  {
    "tid": [{"value": 1}],
    "name": [{"value": "Green"}],
    "vid": [{"value": "colors"}]
  },
  {
    "tid": [{"value": 2}],
    "name": [{"value": "Red"}],
    "vid": [{"value": "colors"}]
  },
  {
    "tid": [{"value": 3}],
    "name": [{"value": "White"}],
    "vid": [{"value": "colors"}]
  }
]

5. 进阶:自定义端点(要更灵活的输出?安排!)

如果默认的输出结构不符合你的需求(比如要扁平化数据、加额外字段),可以整个自定义模块来搞自己的端点:
比如在自定义模块的routing.yml里加个路由:

custom_colors.rest:
  path: '/api/colors'
  defaults:
    _controller: '\Drupal\custom_colors\Controller\ColorsController::getColors'
    _title: 'Color Terms'
  requirements:
    _permission: 'access content'
  methods: [GET]

然后写对应的控制器类ColorsController.php:

<?php

namespace Drupal\custom_colors\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\taxonomy\Entity\Term;

class ColorsController extends ControllerBase {

  public function getColors() {
    // 替换成你的颜色词汇表机器名
    $vid = 'colors';
    $terms = Term::loadTree($vid);
    
    $output = [];
    foreach ($terms as $term) {
      $output[] = [
        'id' => $term->tid,
        'name' => $term->name,
        // 要是有自定义颜色字段,直接加在这里
        'hex_code' => $term->field_hex_code?->value ?? ''
      ];
    }
    
    return $this->json($output);
  }

}

启用自定义模块后,访问/api/colors就能拿到你想要的简洁结构了!


哦对了,如果你用的是WordPress,思路也差不多:
用register_rest_route()注册自定义端点,回调函数里查分类术语再整理返回就行。给你个示例代码:

add_action('rest_api_init', function () {
  register_rest_route('custom/v1', '/colors', [
    'methods' => 'GET',
    'callback' => 'get_color_terms',
  ]);
});

function get_color_terms() {
  $terms = get_terms([
    'taxonomy' => 'colors', // 你的自定义分类法机器名
    'hide_empty' => false,
  ]);
  
  $output = [];
  foreach ($terms as $term) {
    $output[] = [
      'id' => $term->term_id,
      'name' => $term->name,
      'slug' => $term->slug
    ];
  }
  
  return rest_ensure_response($output);
}

访问/wp-json/custom/v1/colors就能拿到术语列表啦!

内容的提问来源于stack exchange,提问作者Chris Mitchell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:54:50