4myth/api

同步 Laravel 框架间的数据

v1.0.2 2020-04-06 14:57 UTC

This package is auto-updated.

Last update: 2024-09-07 01:43:17 UTC


README

Latest Stable Version License Total Downloads

适用于 Laravel 5.5 及更高版本

此包允许您与 Laravel 5.5 及更高版本同步数据。包含管理器和客户端两部分

包安装

在您的 composer.json 中要求此包,并更新 composer。

composer require 4myth/api

Laravel

Laravel 5.5 使用包自动发现,因此不需要您手动添加 ServiceProvider/Facade。

您可以使用别名来缩短代码。

use Myth\Api;

Api::name();

最后,您可以发布此包

php artisan vendor:publish --tag=myth-api

入门指南

1- 管理端

  • 配置文件

    您需要设置的连接客户端的设置。您的 name 和您的 clients

"name"    => "manager",
"clients" => [
      # Client name
      "client-name" => [
          "secret"   => "secret",
          "base_uri" => "http://127.0.0.1/api/v1",
          "models"   => [
              App\User::class => [
                  "uri"         => "user",
                  "transformer" => App\UserApiTransformer::class,
              ],
          ],
          "options"  => [
              "http" => [],
          ],
      ],
  ],
]

示例多个客户端

[
    "client-1" => [],
    "client-2" => [],
];

示例多个与客户端关联的模型

[
    "client-1" => [
        "models" => [
            App\User::class => [],
            Some\Name\SomeModel::class => [],
        ],
    ]  
];

客户端配置

客户端数组中的 key 必须是您应用程序中的客户端名称。

所有选项 array keys: secret,base_uri,options,models

  1. secret: 客户端的身份验证密钥,您可以从您的客户端获取。
  2. base_uri: 客户端 API URL。例如:http://127.0.0.1/api/v1
  3. options: 您客户端选项的数组。可用选项:http
  4. models: 您模型的数组,将能够与特定客户端进行 syc
    • uri: 您客户端软件中模型 urlprefix
    • transformer: 当您的系统同步 send 模型数据到您的客户端时,将自动使用此选项,您必须为每个客户端的模型创建一个新的 transformer。

设置

  1. 模型。
  2. 模型转换器。

模型

在您开始使用此包之前,您必须使用包 trait 设置您的模型。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Myth\Api\Traits\HasApiManager;

class User extends Model
{
    use HasApiManager;

    // ....
}

模型转换器

首先,创建一个新的模型 transformer,我们已经在 config 中配置,我们可以执行 artisan 命令

php artisan myth:make-client-transformer TransformerName

然后,我们将在应用程序目录中找到转换器 app\TransformerName.php

转换器文件

public function body(): array
{
    return [];
}

body 方法必须返回一个数组数据,您将在与客户端同步此模型时发送。

示例

public function body(): array
{
    return [ "name" => "MyTh", "password" => 123 ];
}

客户端将在 body 请求中收到此数组。

用法

访问客户端

要访问应用程序中的客户端,您可以使用包 facadeApi

use Myth\Api;

$client = Api::client("client-name");

访问客户端模型

use Myth\Api;

$client = Api::client("client-name");

/** @var Myth\Api\ClientModelWrapper $model */
$ClientModelWrapper = $client->model(User::class);
$ClientModelWrapper = $client->model(User::find(1));

/** @var \Illuminate\Database\Eloquent\Model $model */
 $model = $ClientModelWrapper->model();

向客户端发送数据

您可以通过多种方式发送您的数据

use Myth\Api;


// facade
$body = [ "name" => "MyTh", "password" => 123 ];
$response = Api::sendToClient("client-name", User::calss, $body);

// ----------------------

// client wrapper
$client = Api::client("client-name");

$user = User::find(123);
$response = $client->sendData($user);
dd($response);

$body = [ "name" => "Name", "password" => "123456789"];
$response = $client->sendData(User::class,$body);
dd($response);

// ----------------------

// by model directly
$user = User::find(2);
$response = $user->sendToClient("client-name");
dd($response);

响应

使用类 ResponseInterface 包的响应包含您可以在代码中轻松访问的方法

  1. request: \GuzzleHttp\Psr7\Response 查看:http://docs.guzzlephp.org
  2. response: 客户端响应数组
  3. client_id: 数据库中客户端的唯一 ID。

客户端区域存储

use Myth\Api;

$data = Api::clientData("client-name", User::class, $sync = true)->get();
$data = Api::clientData("client-name", User::class, $sync = false)->get();
$data = Api::clientData("client-name", User::class, $sync = null)->get();
dd($data);

$client = Api::client('client-name');
$data = $client->model(User::class)->data($sync = true)->get();
$data = $client->model(User::class)->data($sync = false)->get();
$data = $client->model(User::class)->data($sync = null)->get();
dd($data);

$data = User::clientData("client-name", $sync = true)->get();
$data = User::clientData("client-name", $sync = false)->get();
$data = User::clientData("client-name", $sync = null)->get();
dd($data);

标记您的模型

设置必须与客户端同步

use Myth\Api;

$model = Api::syncWithClient("client-name", $client_id = 4, $model = User::find(1));
$model = Api::client("client-name")->syncModel($client_id = 5, $model = User::find(1));
$model = User::find(1)->syncWithClient("client-name", $client_id = 3);

设置已与客户端同步

use Myth\Api;

$model = Api::syncedWithClient("client-name", $client_id = 4, $model = User::find(1));
$model = Api::client("client-name")->syncedModel($client_id = 5, $model = User::find(1));
$model = User::find(1)->syncedWithClient("client-name", $client_id = 3);

与客户端解除模型同步 删除关系

use Myth\Api;

$model = Api::unsyncWithClient("client-name", $client_id = 1, $model = User::find(1));
$model = Api::client("client-name")->unsyncModel($client_id = 1, $model = User::find(1));
$model = User::find(1)->unsyncWithClient("client-name", $client_id = 1);