i74ifa / gpapi by 74ifa

package to solve the problem of increasing unused data in api.
24
1
1
Package Data
Maintainer Username: 74ifa
Maintainer Contact: i74ifa@gmail.com (i74ifa)
Package Create Date: 2022-02-21
Package Last Update: 2024-03-20
Language: PHP
License: MIT
Last Refreshed: 2024-04-14 15:00:12
Package Statistics
Total Downloads: 24
Monthly Downloads: 3
Daily Downloads: 0
Total Stars: 1
Total Watchers: 1
Total Forks: 0
Total Open Issues: 0

Gpapi is Some grapql solutions in Rest api

Solutions

  • response specific relationships
  • response specific response params
  • ~~response params from relationships~~ Underway

how is work

The work is started in the trait class called Gpapi

We add it to the Resource Class to be supported after that

Let's start a project to show the way

Relations param form

We will stick to this formula

localhost/bestApi/api/post/1?relations=tags

relations=tags We want a relationship tags

Define params for a given relationship Not supported yet

localhost/bestApi/api/post/1?relations=tags[id, name]

Models

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

Resources

<?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);
    }
}

This is the default resources

Let's support 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' => [
                'title' => $this->title,
                // ...any_params
            ],
        ];
        // If a route contains relations
        if ($request->has('relations')) {
            $data['relationships'] = $this->withRelations($request->get('relations'));
        }
    }