Package Data | |
---|---|
Maintainer Username: | megaads-vn |
Maintainer Contact: | info@megaads.vn (megaads-vn) |
Package Create Date: | 2018-05-12 |
Package Last Update: | 2024-08-23 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-15 15:12:15 |
Package Statistics | |
---|---|
Total Downloads: | 1,526 |
Monthly Downloads: | 14 |
Daily Downloads: | 0 |
Total Stars: | 15 |
Total Watchers: | 11 |
Total Forks: | 2 |
Total Open Issues: | 0 |
A pretty library to help developers build RESTful APIs
lightly, quickly and properly even without writing code.
It's always easy to customize to suit any need such as defining data relationships, authorization, caching, communicating or integrating into other systems.
Use HTTP clients like Postman to invoke RESTful API calls.
Combine with API Gateway is also recommended to build a completely development environment for microservice.
Apify is packed as a composer package. So it's installed quickly in 2 steps
Require the composer package
composer require megaads/apify
Register the provider:
Megaads\Apify\ApifyServiceProvider
| HTTP Method | API URL | Description | For example
|-------------|----------------------------------|-----------------------|---------------------------------
| GET | /api/entity
| List all records of table that match the query | curl http://my-api.com/api/user?filters=age>20
|
| GET | /api/entity/:id
| Retrieve a record by primary key :id | curl http://my-api.com/api/user/123
|
| POST | /api/entity
| Insert a new record, bulk inserting is also avaiable | curl -X POST http://my-api.com/api/user -d '[{"username":"user1", "age":"20"},{"username":"user2", "age":"25"}]' -H "Content-Type: application/json"
|
| PUT | /api/entity/:id
| Replaces existed record with new one | curl -X PUT http://my-api.com/api/user/123 -d '{"id":"123", "username":"user1", "age":"20"}' -H "Content-Type: application/json"
|
| PATCH | /api/entity/:id
| Update record element by primary key | curl -X PATCH http://my-api.com/api/user/123 -d '{"age":"21"}' -H "Content-Type: application/json"
|
| DELETE | /api/entity/:id
| Delete a record by primary key | curl -X DELETE http://my-api.com/api/user/123
|
| DELETE | /api/entity
| Delete bulk records that match the query | curl -X DELETE http://my-api.com/api/user?filters=age>100
|
| POST | /api/upload
| Upload a file | curl -X POST http://my-api.com/api/upload -H "Content-Type: multipart/form-data" -F "data=@song.mp3"
| Parameter | Required | Default | Description | |-------------|-------------|------------|------------------------------------------------------------------| | page_id | No | 0 | Page index, start at 0 | page_size | No | 50 | Number of rows to retrieve per page
/api/post?page_id=2&page_size=20
Order by multiple columns using sorts
parameter
/api/post?sorts=user_id
/api/post?sorts=-created_at
/api/post?sorts=user_id,-created_at
Select columns from the records using fields
parameter. SQL aggregate functions such as COUNT
, MAX
, MIN
, SUM
, AVG
, SQL aliases are also available
/api/post?fields=id,content,user_id,sum(view_count) as view_sum
Group the result-set by one or more columns using groups
parameter and combine with aggregate functions using Selection
/api/post?fields=user_id,sum(view_count)&groups=user_id
| Operator | Condition | For example
|--------------|--------------------|----------------------------------
| = | Equal to | /api/post?filters=user_id=1
| != | Not equal | /api/post?filters=user_id!=1
| > | Greater | /api/post?filters=user_id>1
| >= | Greater or equal | /api/post?filters=user_id>=1
| < | Less | /api/post?filters=user_id<1
| <= | Less or equal | /api/post?filters=user_id<=1
| ={} | In | /api/post?filters=user_id={1;2;3}
| !={} | Not in | /api/post?filters=user_id!={1;2;3}
| =[] | Between | /api/post?filters=user_id=[1;20]
| !=[] | Not between | /api/post?filters=user_id!=[1;20]
| ~ | Like | /api/post?filters=title~hello
| !~ | Not like | /api/post?filters=title!~hello
Apify supports filtering records based on more than one AND
, NOT
condition by using comma. For example:
/api/post?filters=user_id=1,status={enabled;pending},tile~hello,view_count!=null
Complex conditions that combine AND
, OR
and NOT
will be available soon.
Apify works by a simple mechanism, looking for a model class that correspond to the API entity, otherwise the API entity will be matched to a suitable DB table. That means no model class is required to create, do it only in the case of defining relationships, customizing.
So API entity name should follow one of the conventions:
The API entity name is the same as a model class name
Or the API entity name in snake_case
that correspond to a model class with the name in CamelCase
Or the API entity name is the same as a DB table name
Apify is packed into a Laravel
/ Lumen
package so relationships also are defined as methods on Eloquent
model classes.
See Laravel docs for details: https://laravel.com/docs/5.6/eloquent-relationships
Let's consider the following relationship definations:
Nation
has many City
(one-to-many relationship)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
belongs to a Nation
(many-to-one relationship)City
has many District
(one-to-many relationship)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
belongs to a City
(many-to-one relationship)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 provides the ability to embed relational data into the results using embeds
parameter
For example
/api/nation?embeds=cities
/api/city?embeds=nation,districts
/api/district?embeds=city
Even nested relationships
/api/nation?embeds=cities.districts
/api/district?embeds=city.nation
/api/city?filters=nation.location_code=EU,districts.name~land
/api/post
or
/api/post?metric=get
Response format
{
"meta": {
"has_next": true,
"total_count": 100,
"page_count": 2,
"page_size": 50,
"page_id": 0
},
"result": [],
"status": "successful"
}
/api/post?metric=first
Response format
{
"result": {},
"status": "successful"
}
/api/post?metric=count
Response format
{
"result": 50,
"status": "successful"
}
/api/post?metric=increment&fields=view_count
Response format
{
"result": 1,
"status": "successful"
}
Is being updated ...
| Key | Default value | Description |
|-------------|----------------------------------|---------------------------------------------------------
| APIFY_PREFIX_URL | api
| API URL prefix |
| APIFY_MODEL_NAMESPACE | App\Models
| Models namespace |
| APIFY_UPLOAD_PATH | /home/upload
| Upload path |
| APIFY_MQ_ENABLE | false
| Enable / Disable Message queue (Event Bus) |
| APIFY_MQ_HOST | | Message queue server host |
| APIFY_MQ_PORT | | Message queue server port |
| APIFY_MQ_USERNAME | | Message queue authentication - username |
| APIFY_MQ_PASSWORD | | Message queue authentication - password | |
Read docs here : https://github.com/megaads-vn/apify/blob/master/README-AUTH.md
The Apify is open-sourced software licensed under the MIT license
Email: phult.contact@gmail.com
Skype: phult.bk