i74ifa/gpapi

包用于解决api中未使用数据增加的问题。

0.2 2024-03-20 09:09 UTC

This package is auto-updated.

Last update: 2024-09-20 10:22:42 UTC


README

解决方案

  • 响应特定关系
  • 响应特定响应参数
  • 从关系中获取响应参数

如何工作

工作始于名为 Gpapi 的特质类

然后我们将其添加到支持资源类中

让我们启动一个项目来展示方法

关系参数表单

我们将坚持这个公式

gpapi.test/bestApi/api/post/1?relations=tags

relations=tags 我们想要一个名为 tags 的关系

为给定关系定义参数

gpapi.test/bestApi/api/post/1?relations=tags[id, name]

模型

  • App\Models\Post
  • App\Models\Tag

资源

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class PostResource extends JsonResource
{
    public function toArray($request)
    {
        return parent::toArray($request);
    }

}
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class TagResource extends JsonResource
{
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

这是默认资源

让我们支持 PostResource

use I74ifa\Gpapi\Gpapi
use I74ifa\Gpapi\Interfaces\interfaceGpapi;

class QuestionResource extends JsonResource implements interfaceGpapi
{
    use Gpapi;
    
    public function toArray($request)
    {

        return $this->resolveRelations($request);
    }

    public function resolveRelations($request)
    {
        $data = [
            'id' => $this->getKey(),
            'table' => $this->getTable(),
            'data' => $this->getParams($request->get('params')),
        ];
        // If a route contains relations
        if ($request->has('relations')) {
            $data['relationships'] = $this->withRelations($request->get('relations'));
        }
    }