drewlabs / rest-query
REST服务查询实现
Requires
- php: >=7.2
Requires (Dev)
- drewlabs/curl-rest-client: ^0.2.0
- drewlabs/overloadable: ^0.1.10
- phpunit/phpunit: >=6.0
Suggests
- drewlabs/curl-rest-client: Required for making http request using the RESTQueryClient
- drewlabs/overloadable: Request by the QueryLanguageClient class implementation to provide custom method overloading
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
neq
是 eq
查询方法的逆操作
$result = QueryBuilder::new()->neq('title', 'Lorem Ipsum')->getQuery(); // ['where' => [['title, '<>, 'Lorem Ipsum']]]
- lte / lt
lte
和 lt
分别允许开发人员构建检查列值是否小于(小于等于)给定值的查询。
$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
gte
和 gt
分别允许开发人员构建检查列值是否大于(大于等于)给定值的查询。
$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