giadc/json-api-response

用于处理 JSON API 响应的包

4.0.0 2024-07-25 12:44 UTC

This package is auto-updated.

Last update: 2024-09-25 13:10:42 UTC


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/fractalwithItem()withCollection()withPaginatedCollection() 响应。有关转换器的更多信息,请参阅 Fractal 文档

ResourceTransformer

ResourceTransformer 添加了所需的 transform,用于从所需的 jsonSerialize 方法中提取 JsonApiResource 的数据。它还允许自动管理 excludesfields 请求参数选项。

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": {} }
  ]
}