如何为包含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
相关产品推荐
相关产品推荐

