DGS API Mode
If mode
is set to api
, the XML will support RESTful.
<?xml version="1.0" encoding="UTF-8" ?>
<table name="currencies"
charset="UTF-8"
primaryKey="id"
defaultOrderField="id"
defaultOrderDirection="ASC"
mode="api"
rowsForPage="100" >
<fields>
<field type="text"
caption="<?php echo __('Code'); ?>"
name="ident"
width="50%" />
<field type="text"
caption="<?php echo __('Name'); ?>"
name="name"
width="50%" />
</fields>
<actions>
<action type="insert"
caption="<?php echo __('Add')?>"
title="<?php echo __('Add'); ?>" />
<action type="list"
caption="<?php echo __('Currencies')?>" />
<action type="edit"
caption="<?php echo __('Edit')?>"
title="<?php echo __('Edit'); ?>" />
<action type="remove"
caption="<?php echo __('Remove')?>" />
<action type="info"
caption="<?php echo __('Info')?>" />
</actions>
</table>
To retrieve all data, send a GET request to /festi/[XML_NAME]/[PLUGIN_NAME]/
or another custom URL.
To get (or delete) data for a single record, send a GET (DELETE)
request with an additional GET parameter: [XML_NAME]%5BID%5D=12345
.
To add a record to the table, send a POST request
with JSON-formatted data in the message body. For example:
{"name":"USD","ident":"USD"}
.
To edit a record, send a PUT request with a GET parameter (same as for retrieving data) and JSON-formatted data in the message body.
- GET:
http://DOMAIN_NAME/festi/XML_NAME/PLUGIN_NAME/
- List Action - PUT:
http://DOMAIN_NAME/festi/XML_NAME/PLUGIN_NAME/?XML_NAME[ID]=1
- Info Action - POST:
http://DOMAIN_NAME/festi/XML_NAME/PLUGIN_NAME/
- Insert Action - PUT:
http://DOMAIN_NAME/festi/XML_NAME/PLUGIN_NAME/?XML_NAME[ID]=1
- Edit Action - DELETE:
http://DOMAIN_NAME/festi/XML_NAME/PLUGIN_NAME/?XML_NAME[ID]=1
- Remove Action
Using Remote RESTful API
You can use API to work with DGS.
Proxy Attribute
By default, SQL proxy is used to work with the database.
To work with a remote API, you need to:
- Define your Proxy class by inheriting from
OpenApiProxy
- Add it to the attribute
proxy="YourProxy"
- Add the required method
getBaseEndpointUrl
- Override the methods needed to ensure compatibility with the remote API,
for example:
getHeaders
,getListValuesRows
, etc. You can see the list inOpenApiProxy
Example of working with GitLab API
Add DGS to work with Projects through GitLab API.
class GitLabApiProxy extends OpenApiProxy
{
function getBaseEndpointUrl(...$params): string
{
return 'https://gitlab.varteq.com/api/v4/';
}
protected function getHeaders(string $storeName): array
{
return array(
'PRIVATE-TOKEN: '.$this->getAccessToken(),
'Content-type: application/json'
);
}
protected function getAccessToken()
{
return 'XXXXXXX';
}
protected function isListValuesTotalInHeaders(): bool
{
return true;
}
public function getListValuesTotalFromHeaders(array $headers): int
{
if (array_key_exists('x-total', $headers) && !empty($headers['x-total'][0])) {
return (int) $headers['x-total'][0];
}
return 0;
}
protected function appendListValuesLimitRequestParam(array &$params, array $limit): void
{
$params['page'] = $this->store->getCurrentPageIndex();
$params['per_page'] = $limit['rowsPerPage'];
}
protected function appendListValuesOrderByRequestParam(array &$params, array $orderBy): void
{
$params['order_by'] = $orderBy['orderBy'];
$params['sort'] = $orderBy['orderByDirection'];
}
}
<?xml version="1.0" encoding="UTF-8"?>
<table charset="UTF-8"
name="projects"
primaryKey="id"
defaultOrderField="id"
defaultOrderDirection="DESC"
proxy="GitLabApi"
rowsForPage="50">
<fields>
<field type="readonly"
name="id"
required="true"
sorting="true"
caption="<?php echo __('ID'); ?>" />
<field type="text"
name="name"
required="true"
caption="<?php echo __('Name'); ?>"
sorting="true"
filter="text" />
<field type="text"
name="name_with_namespace"
caption="<?php echo __('Namespace'); ?>"
onlyList="true" />
<field type="datetime"
name="created_at"
isnull="true"
caption="<?php echo __('Created at'); ?>"
onlyList="true"
sorting="true" />
<field type="checkbox"
name="issues_enabled"
isnull="true"
onlyList="true"
caption="<?php echo __('Issues Enabled'); ?>" />
<field type="foreignKey"
name="creator_id"
isnull="true"
foreignTable="users"
foreignKeyField="id"
foreignValueField="name"
onlyList="true"
caption="<?php echo __('Author'); ?>" />
</fields>
<actions>
<action type="list"
caption="<?php echo __('Projects'); ?>"/>
<action type="insert"
caption="<?php echo __('Add'); ?>"/>
<action type="edit"
caption="<?php echo __('Edit'); ?>"/>
<action type="info"
caption="<?php echo __('Info'); ?>"/>
<action type="remove"
caption="<?php echo __('Delete'); ?>"/>
</actions>
</table>