...
Code Block | ||||
---|---|---|---|---|
| ||||
# Мы объявляем package с названием "*модуль*::Api".
package Portal::Api;
=head1 NAME
Portal Api
=cut
use strict;
use warnings FATAL => 'all';
# Импортируем сообщения для ошибок
use Control::Errors;
my Control::Errors $Errors;
#**********************************************************
=head2 new($db, $conf, $admin, $lang, $debug, $type)
=cut
#**********************************************************
# Создаём конструктор
sub new {
my ($class, $db, $admin, $conf, $lang, $debug, $type) = @_;
my $self = {
db => $db,
admin => $admin,
conf => $conf,
lang => $lang,
debug => $debug
};
bless($self, $class);
$self->{routes_list} = ();
# Определяем, для чего роутер вызвал наш модуль API
# Соответственно, ли это USER API или ADMIN API
# И записываем routes_list
if ($type eq 'user') {
$self->{routes_list} = $self->user_routes();
}
elsif ($type eq 'admin') {
$self->{routes_list} = $self->admin_routes();
}
$Errors = Control::Errors->new($self->{db}, $self->{admin}, $self->{conf},
# Обязательно обозначить что это за модуль,
# чтобы система могла подгрузить сообщения для ошибок со словаря модуля за потребности
{ lang => $lang, module => 'Portal' }
);
# Сохраняем словарь ошибок в объект, он нам потом будет нужен
$self->{Errors} = $Errors;
return $self;
}
#**********************************************************
=head2 admin_routes() - Returns available ADMIN API paths
=cut
#**********************************************************
sub admin_routes {
# Здесь нужно возвращать специальный массив ADMIN API
return [];
}
#**********************************************************
=head2 user_routes() - Returns available USER API paths
=cut
#**********************************************************
sub user_routes {
# Здесь нужно возвращать специальный массив USER API
return [];
}
1; |
Словарь ошибок
Документация по словарю ошибок
...
Code Block | ||||
---|---|---|---|---|
| ||||
#**********************************************************
=head2 admin_routes() - Returns available ADMIN API paths
=cut
#**********************************************************
sub admin_routes {
my $self = shift;
return [
{
# HTTP метод, GET, POST, PUT, PATCH, DELETE
method => 'GET',
# Абсолютный путь, за которым можно будет достучаться, например billing.url/api.cgi/portal/articles
path => '/portal/articles/',
# Указываем "контроллер" для API /portal/articles/*
controller => 'Portal::Api::admin::Articles',
# Даём ссылку на функцию-эндпойнт контроллера
endpoint => \&Portal::Api::admin::Articles::get_portal_articles,
credentials => [
# Определяем нужные параметры для авторизации.
# ADMIN - API_KEY
# ADMINSID - admin_sid по cookie (в том числе для api_call)
'ADMIN', 'ADMINSID'
]
},
]
} |
...