...
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; } 1; |
Словарь ошибок
Важная часть - позволяет систематизировать ошибки и избежать разночтений ошибок во время написания кода.
Создаем в корневой папке модуля файл Errors.pm
...
Code Block | ||||
---|---|---|---|---|
| ||||
# Пэкэдж должен ОБЯЗАТЕЛЬНО иметь название *модуль*::Errors
# Это позволяет библиотеке словаря ошибок его же найти
package Portal::Errors;
=head1 NAME
Portal::Errors
# Обязательно укажите в pod какая приставка ошибок у модуля.
# Это поможет лучше его найти при разработке.
IDS: 144*
=cut
use strict;
use warnings FATAL => 'all';
#**********************************************************
=head2 errors() - errors list
=cut
#**********************************************************
# Создаём функцию словаря ошибок с анонимным хэшэм.
# В будущем он будет заполнен парами *errno* => *errstr*
sub errors {
return {
# Семизначный код ошибки, с приставкой 144 (модуль Portal) => ключ в словаре ошибки
# Ниже пример
1440001 => 'ERR_PORTAL_NO_SENDER'
};
}
1;
|
Валидатор
Документация по валидатору
Позволяет проверять полученный реквест от клиента по схеме.
Избегает вызова пути с неправильными параметрами, что повышает устойчивость системы и возможных ошибок.
Также позволяет чётко и подробно расписывать какие именно параметры отсутствуют или неправильные в целом.
Создаём корневой файл Validations.pm с таким примерным содержанием:
Code Block | ||||
---|---|---|---|---|
| ||||
# Называем пэкэдж *модуль*::Validations
package Portal::Validations;
use strict;
use warnings FATAL => 'all';
# Вызываем специальный модуль экспортера, для удобного экспортирования констант с описанием в IDE
use Exporter;
use parent 'Exporter';
# Записываем константы валидации в экспорт
our @EXPORT = qw(
POST_PORTAL_ARTICLES
);
# Записываем константы валидации в экспорт
our @EXPORT_OK = qw(
POST_PORTAL_ARTICLES
);
use constant {
# Называем константу *МЕТОД*_ПУТЬ_
# А подробнее про валидатор можно узнать ссылкой выше.
POST_PORTAL_ARTICLES => {
TITLE => {
required => 1,
type => 'string',
min_length => 5,
max_length => 255
},
DATE => {
required => 1,
type => 'date'
},
PORTAL_MENU_ID => {
required => 1,
type => 'string'
},
SHORT_DESCRIPTION => {
type => 'string',
max_length => 600
},
CONTENT => {
type => 'string',
}
},
};
1;
|
ADMIN API
Создание роутов
...