4myth / api
同步 Laravel 框架间的数据
v1.0.2
2020-04-06 14:57 UTC
Requires
- php: >=7.1
- ext-json: *
- laravel/framework: >=5.8
Requires (Dev)
- guzzlehttp/guzzle: >=6.2.1
This package is auto-updated.
Last update: 2024-09-07 01:43:17 UTC
README
适用于 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" => "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
secret
: 客户端的身份验证密钥,您可以从您的客户端获取。base_uri
: 客户端 API URL。例如:http://127.0.0.1/api/v1
options
: 您客户端选项的数组。可用选项:http
。http
: GuzzleHttp\Client 选项。查看:http://docs.guzzlephp.org
models
: 您模型的数组,将能够与特定客户端进行syc
。uri
: 您客户端软件中模型url
或prefix
。transformer
: 当您的系统同步send
模型数据到您的客户端时,将自动使用此选项,您必须为每个客户端的模型创建一个新的 transformer。
设置
- 模型。
- 模型转换器。
模型
在您开始使用此包之前,您必须使用包 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 请求中收到此数组。
用法
访问客户端
要访问应用程序中的客户端,您可以使用包 facade
的 Api
。
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
包的响应包含您可以在代码中轻松访问的方法
request
: \GuzzleHttp\Psr7\Response 查看:http://docs.guzzlephp.orgresponse
: 客户端响应数组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);