giadc/json-api-response
用于处理 JSON API 响应的包
Requires
- php: >=8.1
- doctrine/collections: ^1.6
- doctrine/orm: ^2.11
- giadc/json-api-request: 3.0.4
- league/fractal: ^0.20
- symfony/http-kernel: ^7.0
Requires (Dev)
- mockery/mockery: ^1.3
- phpstan/phpstan: ^1.5
- phpstan/phpstan-mockery: ^1.0
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^10
README
当前版本:v0.1
此包简化了返回符合 JSON API 标准的 HTTP API 响应。
安装
通过 Composer
$ composer require giadc/giadc-json-response
Laravel
将以下内容添加到您的 config/app.php
文件的 providers
数组中
Giadc\JsonApiResponse\ServiceProviders\LaravelDoctrineServiceProvider::class,
用法
基本示例
use Giadc\JsonResponse\Responses\Response; class YourClass { _construct(Response $response) { $this->response = $response; } public function jsonApiFunctions() { return $this->response->success(); } }
可用函数
$response->getStatusCode(): int; $response->setStatusCode(int $statusCode); $response->withArray(array $array, array $headers = []): JsonResponse; $response->withError(string $message): JsonResponse; $response->createSuccessful( $entity = null, TransformerAbstract $transformer = null, string $resourceKey = '', array $headers = []): SymfonyResponse; $response->withItem( $item, TransformerAbstract $transformer, string $resourceKey, array $headers = []): JsonResponse; $response->withResourceItem( JsonApiResource $item, ResourceTransformer $transformer, array $headers = []): JsonResponse; $response->withCollection( $collection, TransformerAbstract $transformer, string $resourceKey = ''): SymfonyResponse; $response->noContent(array $headers = []): JsonResponse; $response->withPaginatedCollection(PaginatedCollection $paginator, TransformerAbstract $transformer, string $resourceKey = ''): JsonResponse; $response->withHttpException( HttpExceptionInterface $httpException): JsonResponse; $response->errorForbidden(string $message = 'Forbidden'): JsonResponse; $response->errorInternalError(string $message = 'Internal Error'): JsonResponse; $response->errorNotFound(string $message = 'Not Found'): JsonResponse; $response->errorUnauthorized(string $message = 'Unauthorized'): JsonResponse; $response->errorValidation(string $message = 'Validation Error'): JsonResponse; $response->errorsValidation(array $messages): JsonResponse; $response->errorNotSearchable(string $message = 'Not Searchable'): JsonResponse;
Fractal 转换器
GIADC JSON 响应包使用 league/fractal
的 withItem()
、withCollection()
和 withPaginatedCollection()
响应。有关转换器的更多信息,请参阅 Fractal 文档。
ResourceTransformer
ResourceTransformer 添加了所需的 transform
,用于从所需的 jsonSerialize
方法中提取 JsonApiResource 的数据。它还允许自动管理 excludes
和 fields
请求参数选项。
JsonApiResource
强制实体具有以下方法
- getResourceKey: 现在我们可以引用此方法,而不是每次都硬编码此值。
- id: JsonAPI 要求必须有一个 id。
- jsonSerialize: 用于新的 ResourceTransformer。
使用 JsonApiResource Item 响应自动将 $resourceKey
传递给转换器。 $response->withResourceItem($item, $transformer, $headers)
排除
不受 JsonAPI 支持
可以从 JsonApiResource 的响应中排除属性。一个合适的用例是在不需要时从 Campaigns 中删除 config/ui/tracking。这将允许我们删除一些冗余的路由,为前端提供更大的灵活性。
示例
/api/export/campaigns?excludes[campaigns]=config,ui
字段 (https://jsonapi.fullstack.org.cn/format/#fetching-sparse-fieldsets)
空值表示不应返回任何字段。 ... 如果客户端请求给定资源类型的受限字段集,则端点不得在其响应中将该类型资源对象的额外字段包含在内。
示例: /api/permissionGroups?fields[permissionGroups]=name&include=permissions&fields[permissions]=
{
"data": [
{
"type": "permissionGroups",
"id": "adops",
"attributes": { "name": "adops" },
"relationships": {
"permissions": {
"data": [{ "type": "permissions", "id": "campaigns.tracking" }]
}
}
},
],
"included": [
{ "type": "permissions", "id": "campaigns.tracking", "attributes": {} }
]
}