Introduction
Simple API, allows exposing any model using API Rest. It is safe and easy to configure. You can create multiple credentials and custom permissions for as many applications as you need. Connect and manage your October Project from another Project, App or CRM.
Method & Functions
All of the basic functionality that you are familiar with OctoberCMS control panel is available through the API.
Method | Function |
---|---|
GET | Get all records |
GET | Get record by id ($primaryKey) |
GET | Get record by column |
GET | Get filtered records |
GET | Get limited records |
GET | Get records with limit and offset |
GET | Get records with pagination |
GET | Get records with relations |
GET | Get records with collection rules |
POST | Create a record |
PUT | Update record by id ($primaryKey) |
PUT | Update record by column |
PUT | Update many records by query filter |
DELETE | Delete record by id ($primaryKey) |
DELETE | Delete record by column |
DELETE | Delete many records by query filter |
Currently version is Spring v2.0.
- Currently version is Spring v2.0.
- Documentation Fall v1.0.8.
Documentation v2.0
- Authentication
- Route parameters
- Query syntax
- Query operators
- Collection rules
- Methods
- Examples:
1. Authentication:
Simple API, require "Basic Auth". You must create the credentials and provide Client ID and API Key on all requests.
Go to Settings > Simple API > Tokens.
2. API Route parameters:
The magic of the API endpoint, allows to work with the most recent and previous versions. And use data collection rules, with a friendly syntax.
Parameter | Required | Description |
---|---|---|
:version | * | The api version in use. |
:resource | * | Name of the resource. |
:query | ? | To filter records with query syntax. |
:rules | ? | To add collection rules. |
API Route:
GET: ~/api/:version/:resource/:query?/:rules?
3. Query syntax:
Replace :query of the route. Multiple filters may be delimited using either a "pipe" character.
Replace | Parameter | description | e.g |
---|---|---|---|
:query | value | To get a record by ID ($primaryKey), replace :query only with the id value. | 4e5b6486 |
:query | column:value | To add a simple filter by $column and $value | published:true |
:query | column:operator:value | To add comparative filter by $column, $operator, and $value. | id:not:null |
4. Query operators:
Operator | description |
---|---|
is | Equal to |
not | Not equal to |
lt | Less than |
gt | Greater than |
lte | Less than or equal |
gte | Greater than or equal |
contains | Contains |
!contains | Not contains |
Example:
GET: ~/api/v2/posts/published:true|published_at:gte:2019-01-01 00:00:00|excerpt:not:null
5. Collection rules:
Below is a list of all available collection rules and their function. Multiple rules may be delimited using either a "pipe" character.
Replace | Parameter | description | e.g |
---|---|---|---|
:rules | first | Get only the first record. | first |
:rules | limit:max | To limit the max of results returned from the query. | limit:100 |
:rules | offset:skip,take | To skip a given number of results in the query, you may use the skip and take. | offset:1,10 |
:rules | order:column,direction | The first argument to the order should be the column you wish to sort by, while the second argument controls the direction of the sort and may be either asc or desc. | order:published_at,desc |
:rules | paginate:items,page | Indicate in the first argument the number of items per page, and in the second the current page. | paginate:15,2 |
:rules | select:col1,col2,col3 | Using the select parameter, you can specify a custom select clause for the query. | select: id,title,excerpt |
:rules | with:rel1,rel2 | When querying, you may specify which relationships should be eager loaded using the with parameter. | with:categories,featured_images |
Example:
GET: ~/api/v2/posts/published:true/select:id,title,excerpt|with:categories,featured_images|order:published_at,desc|limit:100
6. Methods:
Requests should be made using the HTTPS protocol so that traffic is encrypted. The interface responds to different methods depending on the action required.
Method | Usage |
---|---|
GET | For simple retrieval of data. Any request using the GET method is read-only and will not affect any of the objects you are querying. |
POST | To create a new record. If any column or field fails, the new record will not be created. |
PUT | The PUT method can be used to update records that already exist in the database. |
DELETE | To delete records. |
7. Examples:
Below is a list of sample applications, which apply to RainLab.Blog (posts).
GET (read):
Get all records:
GET: ~/api/v2/posts
Get record by id ($primaryKey):
GET: ~/api/v2/posts/3
Get record by column:
GET: ~/api/v2/posts/slug:hello-world/first
Get filtered records:
GET: ~/api/v2/posts/published:true|published_at:gte:2019-01-01 00:00:00
Get limited records:
GET: ~/api/v2/posts/published:true/limit:100
Get records with limit and offset:
GET: ~/api/v2/posts/published:true/offset:15,15
Get records with pagination:
GET: ~/api/v2/posts/published:true/paginate:15,2
Get records with collection rules:
GET: ~/api/v2/posts/published:true/select:id,title,slug|with:categories,featured_images|order:published_at,desc|limit:15
Get response body:
{ "status": "success", "data": { "id": 3, "title": "Prueba de actualización por filter", "slug": "post-de-prueba", "published": 1, "categories": [], "featured_images": [] } }
POST (create):
Create a record:
POST: ~/api/v2/posts -H "Content-Type: application/json" { "title": "Hello world", "slug": "hello-world", "content": "<p>Post content...</p>" }
Response body:
{ "status": "success", "data": { "id": "12", "title": "Hello world", "slug": "hello-world", & more... } }
PUT (update):
Update record by id ($primaryKey):
PUT: ~/api/v2/posts/3 -H "Content-Type: application/json" { "title": "Hello world", "slug": "hello-world", "content": "<p>Update content...</p>" }
Response body:
{ "status": "success", "data": { "id": "3", "title": "Hello world", "slug": "hello-world", "content": "<p>Update content...</p>", & more... } }
Update record by column:
PUT: ~/api/v2/posts/slug:hello-world/first -H "Content-Type: application/json" { "title": "Hello world", "slug": "hello-world", "content": "<p>Update record by column...</p>" }
Response body:
{ "status": "success", "data": { "id": "3", "title": "Hello world", "slug": "hello-world", "content": "<p>Update record by column...</p>", & more... } }
Update many records by query filter:
PUT: ~/api/v2/posts/published:not:true -H "Content-Type: application/json" { "published": 1 }
Response body:
{ "status": "success", "data": { "rows": 3 } } /* Returns the number of affected rows */
DELETE (delete):
Delete record by id ($primaryKey):
DELETE: ~/api/v2/posts/3
Delete record by column:
DELETE: ~/api/v2/posts/slug:hello-world/first
Delete many records by query filter:
DELETE: ~/api/v2/posts/published:false
Response body:
{ "status": "success", "data": { "rows": 1 } } /* All deletion requests return the number of affected rows */
-
Wissam Sale
Found the plugin useful on 28 Jan, 2019
how can i make an aggeration function like count
-
Lucas Zamora author
Replied on 28 Jan, 2019
Hello,
You have several options:
- We can give you access to the repository and do it yourself.
- you can make a query to the api and make a count in your endpoint.
- We can do it for you, in the plugin but we do not have much time, I can next week.
You can send us a message from the author page. https://octobercms.com/author/awebsome
-
Gavin Foster
Found the plugin useful on 13 Dec, 2018
Hello,
No clue how to ask you for support for this plugin. No examples or how to use. Can you help please?
Thank you, Gavin
-
Lucas Zamora author
Replied on 10 Jan, 2019
Hello, you can send us a message from the author page. https://octobercms.com/author/awebsome
-
Jeff Cates
Found the plugin useful on 2 May, 2018
Works great. Docs need a little work (a walk through or examplE) but this is a new plugin. Developer was very responsive with my questions and got everything working.
-
2.0.0 |
!!! Add Api v2.0 Jun 26, 2019 |
---|---|
1.0.8 |
Minor changes Oct 28, 2018 |
1.0.7 |
Minor Fix in POST method Jun 20, 2018 |
1.0.6 |
Minor Fix Update with POST/PUT Jun 20, 2018 |
1.0.5 |
Minor fix (resolve table name of resource) May 09, 2018 |
1.0.4 |
Update Tokens Permissions Mar 31, 2018 |
1.0.3 |
Update Resources Table Mar 31, 2018 |
1.0.2 |
Create Tables Mar 31, 2018 |
1.0.1 |
Initialize plugin. Mar 31, 2018 |
Upgrading to 1.0.8 from 2.0
This update has successfully passed the tests we have done, but seriously consider updating this plugin in a test or development environment.
Required actions:
-
Delete the template api.htm file.
This page is deprecated, you can delete it.
-
Check all your resources that are correctly configured.
The update script does this task for you, but be careful and check it yourself.
-
All ready.
Ready to work with the api v2.0. Check the documentation.