drewlabs/rest-query

v0.1.22 2023-04-10 19:55 UTC

This package is auto-updated.

Last update: 2024-09-10 22:53:35 UTC


README

此库提供RESTful服务查询的客户端实现(类似于graphql),允许开发人员轻松自定义从Web资源请求的数据,并直接向REST服务发送复杂的查询参数。

要求 该库仅与兼容的Web服务一起使用。因此,开发人员必须提供一个实现,该实现解析、编译并处理发送到服务的查询。

安装

使用composer PHP包管理器

composer require drewlabs/rest-query

用法

查询构建器

该库包含一个查询构建器类,提供用于构建和编译查询的流畅接口。以下是一个示例:

use Drewlabs\RestQuery\QueryBuilder;

// ...


// Building the query and using the query builder fluent API
$builder = QueryBuilder::new()
            ->eq('title', 'Lorem Ipsum')
            ->neq('id', 10)
            ->where(function (QueryBuilder $builder) {
                return $builder->in('tags', ['I', 'L', 'F'])
                    ->gt('likes', 120)
                    ->gte('groups', 10);
            });

// Compiling the query output to JSON string
$result = $builder->json();

如上所示,API提供许多流畅方法来定义查询意图

  • eq

eq 方法允许开发人员构建类似 COLUMN=VALUE 的查询

$result = QueryBuilder::new()->eq('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '=', 'Lorem Ipsum']]]
  • neq

neqeq 查询方法的逆操作

$result = QueryBuilder::new()->neq('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '<>, 'Lorem Ipsum']]]
  • lte / lt

ltelt 分别允许开发人员构建检查列值是否小于(小于等于)给定值的查询。

$result = QueryBuilder::new()->lt('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '<', 'Lorem Ipsum']]]
$result = QueryBuilder::new()->lte('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '<=', 'Lorem Ipsum']]]
  • gte / gt

gtegt 分别允许开发人员构建检查列值是否大于(大于等于)给定值的查询。

$result = QueryBuilder::new()->gt('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '>', 'Lorem Ipsum']]]
$result = QueryBuilder::new()->gte('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '>=', 'Lorem Ipsum']]]
  • in

in 子句搜索存在于提供的值列表中的值

$result = QueryBuilder::new()->in('rates', [3, 3.5, 9])->getQuery(); // ['in' => [['title, [3, 3.5, 9]]]]
  • exists

exists 子句允许查询数据库中关系是否存在。

$result = QueryBuilder::new()->exists('comments')->getQuery(); // ['has' => [['comments']]]
$result = QueryBuilder::new()->exists('comments', new SubQuery('where', ['likes', '>', 1000]))->getQuery(); // ['has' => [['column' => 'comments', 'method' => ['params' => ['likes', '>', 1000], 'method' => 'where' ]]]]
  • sort

sort 子句允许开发人员根据 column 对结果集进行排序

注意 排序顺序由一个整数值定义。任何大于 0 的值都转换为 ASC,而任何小于 0 的值都转换为 DESC

$result = QueryBuilder::new()->sort('created_at', -1)->getQuery(); // ['sort' => ['by' => 'created_at', 'order' => 'DESC']]
  • select

select 子句允许开发人员指定从查询服务器中选择列的列表

$columns = QueryBuilder::new()->eq('title', 'Lorem Ipsum')->select('*', 'comments')->getColumns(); // ['*', 'comments'] 

REST查询客户端

REST查询客户端是一个类似于 drewlabs/database 库中查询语言的实现,提供4个重载方法 select()update()delete()create(),将CRUD操作发送到端点服务器。

它需要 drewlabs/curl-rest-client 库来实际向服务器发送HTTP请求。因此,为了使用REST查询客户端,开发人员需要执行以下命令来安装所需的依赖项

composer require drewlabs/curl-rest-client