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

如何配置DDEV实现Drupal 9与Drupal 7的REST API互通?

DDEV环境下Drupal 9调用Drupal 7 REST API配置指南

我有两个运行在DDEV上的Drupal站点:

  • Drupal 7站点:通过REST API暴露数据库数据
  • Drupal 9站点:需要调用上述API获取数据

此前参考相关配置帖子未成功,作为Docker和DDEV新手,需要一份详细分步配置指南实现两站点互通。


站点配置信息

Drupal 7站点配置

name: drupal7
type: drupal7
docroot: "www"
php_version: "5.6"
webserver_type: apache-fpm
router_http_port: "80"
router_https_port: "443"
xdebug_enabled: false
additional_hostnames: ['drupal7.local']
additional_fqdns: ['drupal7.local']
mariadb_version: "10.3"
mysql_version: ""
nfs_mount_enabled: true
mutagen_enabled: false
use_dns_when_possible: true
composer_version: "2"
web_environment: []

ddev describe for drupal 7 site

Drupal 9站点配置

name: drupal9
type: drupal9
docroot: web
php_version: "8.1"
webserver_type: apache-fpm
router_http_port: "80"
router_https_port: "443"
xdebug_enabled: false
additional_hostnames: ['drupal9.local']
additional_fqdns: ['drupal9.local']
database:
  type: mariadb
  version: "10.3"
nfs_mount_enabled: false
mutagen_enabled: false
use_dns_when_possible: true
composer_version: "2"
web_environment: []
nodejs_version: "16"

ddev describe for drupal 9 site

环境信息

  • DDEV版本:1.21.1
  • Docker版本:20.10.17(Docker Desktop 4.12.0)

分步配置指南

1. 启动两个DDEV项目

确保两个站点处于运行状态:

  • 进入Drupal7项目目录,执行:ddev start
  • 进入Drupal9项目目录,执行:ddev start

2. 验证内部网络连通性

在Drupal9的web容器内测试能否访问Drupal7站点:
执行命令:ddev exec curl -k https://drupal7.ddev.site

说明:-k参数用于忽略自签名SSL证书,DDEV默认使用自签证书。
如果命令返回Drupal7的页面内容,说明网络连通正常;若失败,检查项目是否正常启动,或重启DDEV服务(ddev poweroff后再启动所有项目)。

3. 处理SSL证书信任问题

DDEV的自签证书默认不会被PHP信任,导致API调用失败,可选择以下两种方案:

方案一:临时忽略证书验证(快速测试)

在Drupal9的API调用代码中添加忽略SSL验证的配置(以Guzzle为例):

$client = \Drupal::httpClient();
$response = $client->request('GET', 'https://drupal7.ddev.site/api/你的接口路径', [
  'verify' => false,
]);
方案二:信任DDEV CA证书(规范做法)

将DDEV全局CA证书添加到Drupal9容器的信任列表:

  1. 进入Drupal9项目目录,执行以下命令:
# 在容器内创建证书目录
ddev exec mkdir -p /usr/local/share/ca-certificates/ddev
# 复制主机上的DDEV CA证书到容器
ddev cp ~/.ddev/global_config/ca.crt drupal9-web:/usr/local/share/ca-certificates/ddev/ddev-ca.crt
# 更新容器内的证书信任列表
ddev exec update-ca-certificates
  1. 重启Drupal9项目:ddev restart
    之后API调用无需添加忽略证书的配置,PHP会自动信任DDEV的证书。

4. 确认Drupal7 REST API配置正确性

确保Drupal7的REST API已正确配置:

  • 启用RESTful Web Services、RESTful Authentication等必要模块
  • 配置需要暴露的REST资源(如节点、用户等)
  • 设置正确的权限,允许Drupal9的请求方式(如GET、POST)访问API
  • 若使用认证(如基本认证),需在Drupal9的API调用中携带认证信息,例如:
$client = \Drupal::httpClient();
$response = $client->request('GET', 'https://drupal7.ddev.site/api/你的接口路径', [
  'auth' => ['用户名', '密码'],
]);

5. 测试API调用

在Drupal9中编写测试代码验证调用,例如创建自定义模块的控制器:

<?php

namespace Drupal\custom_api_test\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;

class ApiTestController extends ControllerBase {
  public function testApiCall() {
    try {
      $client = \Drupal::httpClient();
      // 替换为你的Drupal7 API接口路径
      $response = $client->request('GET', 'https://drupal7.ddev.site/rest/node/1');
      $data = $response->getBody()->getContents();
      return new Response($data, 200, ['Content-Type' => 'application/json']);
    } catch (\Exception $e) {
      return new Response('API调用失败:' . $e->getMessage(), 500);
    }
  }
}

配置路由后访问对应路径,若能返回Drupal7的API数据,说明配置成功。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:49