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上报告。