mrlijan/restmold

Restmold,Laravel应用程序的基于模型的HTTP客户端。

1.0.0 2022-09-21 23:15 UTC

This package is auto-updated.

Last update: 2024-09-06 11:36:07 UTC


README

Restmold(发音为/restː/ /mold:/)是一个用于建模第三方HTTP服务和作为HTTP客户端的Laravel包。使用此包可以使您建模您的外部HTTP服务。Restmold背后的魔力在于您不需要反复重写API类服务。

灵感

这个项目的灵感始于我工作的公司将其巨型单体迁移到多个小型微服务的时候。时间过去,我们发现随着服务数量的增加,我们不得不反复编写API服务。因此,受到Laravel模型流的启发,Restmold应运而生。


⚠️该包支持Laravel 7及以上版本。


安装

composer require mrlijan/restmold

用法

Restmold非常易于使用;您只需要运行生成命令来创建新的API模型。结果,在\App文件夹下将创建一个名为"ApiModels"的新文件夹,包括新的具体类。

php artisan restmold:generate <service name>



类结构

每个Restmold具体类将从RestModel抽象类继承属性和方法,并且还应该实现以下属性和方法以正常工作



类配置

路由方法被用于构建服务的结构。这意味着下面列出的每个数组索引都将被确定为该服务的方法。

该数组的每个索引将按如下方式构建

protected function routes(): array
{
    return [
        'methodName' => [
            'method' => 'GET', // The reuqest's method
            'path' => '/index' // The reuqest's endpoint
        ],
    ];
}

配置查询参数

您的路由包含查询参数?我们为您解决了这个问题!只需使用常规语法,不包括值。例如

protected function routes(): array
{
    return [
        'list' => [
            'method' => 'GET',
            'path' => '/students?name&age'
        ],
    ];
}



实现

使用查询参数

一旦一切准备就绪并配置完毕,该服务就准备就绪可供使用。

use App\ApiModels\StudentsAPIModel;

class StudentsController extends BaseController
{
    public function listByParams(StudentsAPIModel $students_api)
    {
        return $students_api->list([
            'query' => [
                'name' => 'Brendon',
                'age' => '22'
            ]
        ]);
    }
}

使用请求体

use App\ApiModels\StudentsAPIModel;

class StudentsController extends BaseController
{
    public function createNewStudent(StudentsAPIModel $students_api)
    {
        return $students_api->create([
            'body' => [
                'firstName' => 'John',
                'lastName' => 'Dow'
                'age' => '24',
                'email' => 'john.d@example.com'
            ]
        ]);
    }
}



管道请求和响应

有时,某些服务需要集合管道,为此,已创建请求和响应管道。为了使用它们,只需覆盖以下方法

protected function requestPipe(Request $request): Request
{
    // ... manipulate the data, and return the request
    return $request;
}


protected function responsePipe(Response $response): Response
{
    // ... manipulate the data, and return the response
    return $response;
}