如何配置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: []
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版本: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容器的信任列表:
- 进入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
- 重启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
相关产品推荐
相关产品推荐

