用 Symfony 创建 API 的核心是“请求处理—数据操作—响应返回”,应选用最小骨架、按需安装组件(如 routing、serializer、validator),通过注解定义路由与控制器,结合 DTO 验证、序列化分组及 PHPUnit 测试保障健壮性。

用 Symfony 创建 API,核心是围绕“请求处理—数据操作—响应返回”这条主线,不依赖完整 Web 页面栈,专注轻量、规范、可维护的接口服务。关键不在堆功能,而在选对组件、理清流程、避开常见配置陷阱。
选对项目骨架和基础组件
别直接拉 full 版本——API 服务不需要 Twig、Asset 等前端向组件,徒增体积和安全面。推荐从最小骨架起步:
- 运行
composer create-project symfony/skeleton myapi创建纯净项目 - 按需安装必要组件:
composer require symfony/routing symfony/http-foundation symfony/serializer symfony/validator symfony/doctrine-bridge - 如需数据库支持,再加
composer require doctrine/doctrine-bundle;如需 JWT 认证,后续再装lexik/jwt-authentication-bundle
定义路由与编写控制器
路由是 API 的入口门牌,控制器是实际干活的人。推荐用注解方式,直观且集中:
- 在
src/Controller/UserController.php中写:
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
class UserController
{
#[Route('/api/users', name: 'api_users_list', methods: ['GET'])]
public function list(): JsonResponse
{
return new JsonResponse(['users' => []]);
}
}
- 确保
config/routes.yaml启用了注解扫描(默认已启用):controllers:<br> resource: ../../src/Controller/<br> type: annotation
加入数据验证与序列化
用户传来的数据不能直接信,返回的数据也不能裸奔。这两步是 API 健壮性的底线:
- 定义 DTO(数据传输对象)并加约束:
src/Dto/CreateUserDto.php中用@Assert\NotBlank、@Assert\Email等校验字段 - 在控制器中注入
ValidatorInterface手动验证,或用#[MapRequestPayload](Symfony 6.2+)自动绑定+校验 - 用
SerializerInterface统一控制输出结构,避免手拼数组;配合@Groups注解实现不同接口返回不同字段
启用开发调试与测试支持
API 写完不测=没写。Symfony 提供开箱即用的测试能力:
- 运行
php bin/phpunit可执行测试(默认已配 PHPUnit) - 写一个简单功能测试:
tests/Api/UserTest.php,用$client->request('GET', '/api/users')模拟调用,断言状态码和 JSON 结构 - 开发时打开 Web Debug Toolbar(
APP_ENV=dev下自动启用),点开 “Ajax” 标签页可实时查看每个 API 请求的性能、SQL、日志等


















