skrip42 / api-skeleton
v2.0.1
2021-09-27 05:21 UTC
Requires
- php: >=7.2.5
- ext-ctype: *
- ext-iconv: *
- sensio/framework-extra-bundle: ^6.0
- symfony/console: 5.2.*
- symfony/dotenv: 5.2.*
- symfony/flex: ^1.3.1
- symfony/framework-bundle: 5.2.*
- symfony/http-client: 5.2.*
- symfony/monolog-bundle: ^3.6
- symfony/security-bundle: 5.2.*
- symfony/serializer: 5.2.*
- symfony/yaml: 5.2.*
Requires (Dev)
- symfony/maker-bundle: ^1.33
- symfony/var-dumper: 5.2.*
Conflicts
Replaces
README
symfony api 框架
开箱即用的功能
- 通过令牌进行授权
- 带有错误捕获的 API 序列化器
- 支持 put/patch 参数
- 无需表单即可正确验证实体
- 记录请求
- crun-rest 生成器
创建新项目
composer create-project skrip42/api-skeleton <project_name>
创建 .env.local 并添加环境变量定义到其中
- API_KEY - 您的 API 认证密钥
用法
序列化器
/** in you controller */ class CustomController extends AbstractApiController //extends AbstractApiController { public function sameMethod() : Response { ... //use api(mixed $data, array $meta = []) method to serialize response return $this->api($dataOrEntity); } ...
使用序列化组
//in you entity/DOT class /** @Groups("groupName") */ private $field; //add annotation to filed /** @Groups("groupName") */ public function GetField(): fieldtype //or to you public method //in you controller return $this->api( $dataOrEntity, [ 'groups' => 'groupName' ] );
使用分页
//in you controller print some like this $page = $request->query->getInt('page', 1); $count = $repository->count([]); $perPage = $request->query->getInt('perPage', $count); $sort = $request->query->get('sort'); $entities = $repository->findBy( $params, $sort, $perPage, $perPage * ($page - 1) ); $this->api( $entities, [ 'currentPage' => $page, 'perPage' => $perPage, 'pagesTotal' => ceil($count / $perPage) ] );
带有 HTTP 状态码的错误
use App\Exceptions\ApiException; ... throw new ApiException($message, $statusCode);
实体验证(需要 doctrineORM)
- 在 services.yaml 中取消注释 App\EntityListener 块
- 在您的实体中实现 App\Entity\ValidationInterface
- 在您的实体中添加 @ORM\EntityListeners({"App\EntityListener\ValidateListener"}) 注解
- 大功告成!
RestCRUD 生成器(需要 doctrineORM)
- 在 services.yaml 中取消注释 App\Maker\MakeRest 块
- 运行 ./bin/console make:rest 命令为您的实体创建 RestCRUD 控制器