megaads / apify
一个漂亮的库,帮助开发者轻松、快速、正确地构建RESTful API,即使不写代码也能实现
Requires
- php: >=5.6.4
- php-amqplib/php-amqplib: ^2.7
- dev-master
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.13
- 1.4.12
- 1.4.11
- 1.4.10
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3
- 1.2.99
- 1.2.98
- 1.2.97
- 1.2.96
- 1.2.95
- 1.2.93
- 1.2.92
- 1.2.91
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.4.1
- 1.0.4
- 1.0.3.1
- 1.0.3
- 1.0.2.1
- 1.0.2
- 1.0.1
- 1.0.0
- 0.9.45
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- dev-feature-upgrade-for-laravel-11
This package is auto-updated.
Last update: 2024-09-23 04:15:39 UTC
README
一个漂亮的库,帮助开发者轻松、快速、正确地构建RESTful APIs,即使不写代码也能实现。
它总是很容易定制以满足各种需求,如定义数据关系、授权、缓存、通信或与其他系统集成。
功能
- 为任何MySQL数据库提供RESTful API
- 分页
- 排序
- 选择
- 分组,HAVING
- 过滤
- 关系
- 元数据
- 支持事件总线
使用Apify
- Apify PHP客户端:https://github.com/megaads-vn/apify-client-php
- 使用类似Postman的HTTP客户端调用RESTful API。
- 建议与API Gateway结合使用,以构建微服务的完全开发环境。
安装
Apify被打包为composer包。因此,只需两步即可快速安装
-
需要composer包
composer require megaads/apify -
注册提供者
Megaads\Apify\ApifyServiceProvider
系统要求
- PHP: >= 5.6
- Laravel/ Lumen框架: 5.4.*
- MySQL
- 消息队列服务器:可选
API概述
分页
/api/post?page_id=2&page_size=20
排序
使用sorts参数按多个列排序
升序排序
/api/post?sorts=user_id
降序排序
/api/post?sorts=-created_at
按多个列排序
/api/post?sorts=user_id,-created_at
选择
使用fields参数从记录中选择列。SQL聚合函数(如COUNT、MAX、MIN、SUM、AVG)以及SQL别名也可用
/api/post?fields=id,content,user_id,sum(view_count) as view_sum
GROUP BY
使用groups参数按一个或多个列对结果集进行分组,并结合使用Selection和聚合函数
/api/post?fields=user_id,sum(view_count)&groups=user_id
过滤
Apify支持使用逗号通过一个以上的AND、NOT条件过滤记录。例如
/api/post?filters=user_id=1,status={enabled;pending},tile~hello,view_count!=null
将很快提供结合AND、OR和NOT的复杂条件。
范围函数
/api/order?scopes=orderMeta(values=[adwords,123123];keys=[from,campaign_id]),customer(keyword=nguyen van nam)
namespace App\Models; class Order extends \Megaads\Apify\Models\BaseModel { public function scopeCustomer($query, $params) { if (isset($params['keyword'])) { //do something } } public function scopeOrderMeta($query, $params) { if (isset($params['keys']) && isset($params['values'])) { //do something } } }
实体约定
Apify通过简单的机制工作,寻找与API实体对应的模型类,否则API实体将与合适的数据库表匹配。这意味着不需要模型类来创建,只有在定义关系、自定义的情况下才这样做。
因此,API实体名称应遵循以下约定之一
-
API实体名称与模型类名称相同
-
或API实体名称为
snake_case,与具有CamelCase名称的模型类相对应 -
或API实体名称与数据库表名称相同
关系
Apify被打包成Laravel/ Lumen包,因此关系也被定义为Eloquent模型类上的方法。
有关详细信息,请参阅Laravel文档:https://laravel.net.cn/docs/5.6/eloquent-relationships
让我们考虑以下关系定义
Nation有许多City(一对多关系)
namespace App\Models; class Nation extends \Apify\Models\BaseModel { protected $table = 'location_nation'; public function cities() { return $this->hasMany('App\Models\City', 'nation_id', id); } }
City属于一个Nation(多对一关系)City有许多District(一对多关系)
namespace App\Models; class City extends \Apify\Models\BaseModel { protected $table = 'location_city'; public function nation() { return $this->belongsTo('App\Models\Nation', 'nation_id'); } public function districts() { return $this->hasMany('App\Models\District', 'city_id', id); } }
District属于一个City(多对一关系)
namespace App\Models; class District extends \Apify\Models\BaseModel { protected $table = 'location_district'; public function city() { return $this->belongsTo('App\Models\City', 'city_id'); } }
关系选择
Apify提供了使用embeds参数将关系数据嵌入到结果中的能力
例如:
/api/nation?embeds=cities
/api/city?embeds=nation,districts
/api/district?embeds=city
即使是嵌套关系
/api/nation?embeds=cities.districts
/api/district?embeds=city.nation
基于关系的过滤
/api/city?filters=nation.location_code=EU,districts.name~land
指标
metric=get(默认):检索所有与查询匹配的记录
/api/post
或
/api/post?metric=get
响应格式
{
"meta": {
"has_next": true,
"total_count": 100,
"page_count": 2,
"page_size": 50,
"page_id": 0
},
"result": [],
"status": "successful"
}
metric=first:检索与查询匹配的第一个记录
/api/post?metric=first
响应格式
{
"result": {},
"status": "successful"
}
metric=count:检索与查询匹配的记录数
/api/post?metric=count
响应格式
{
"result": 50,
"status": "successful"
}
metric=increment/decrement:提供方便的方法来增加或减少所选列的值
/api/post?metric=increment&fields=view_count
响应格式
{
"result": 1,
"status": "successful"
}
事件总线
正在更新...
.env配置
认证Apify并授权Apify?
请在此处阅读文档: https://github.com/megaads-vn/apify/blob/master/README-AUTH.md
许可协议
Apify是开源软件,根据MIT许可证授权。
联系我们/即时反馈
电子邮件: phult.contact@gmail.com
Skype: phult.bk
如果您发现错误,请在此处GitHub上报告。