...
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
# HTTP метод
method => 'DELETE',
# Путь, обязательно начинается с имени микромодуля
# определяем path_params
path => '/fees/users/:uid/:id/',
# Определение эндпоинта
handler => sub {
my ($path_params, $query_params, $module_obj) = @_;
# ...
},
# Загружаемый модуль.
# Исторически функционал API делится по принципу Abills/mysql, так что мы можем немного сократить код.
# Мы не особенно рекомендуем использовать эту опцию в будущем, но ознакомиться считаем нужно.
module => 'Fees',
# Определяем нужные параметры для авторизации.
# ADMIN - API_KEY
# ADMINSID - admin_sid по cookie (в том числе для api_call)
credentials => [
'ADMIN', 'ADMINSID'
]
} |
Написание OpenAPI
OpenAPI для ядра находится в корне misc/api/(admin|user)/[module]
Так что для работы нам нужно:
- создать папку misc/api/user/fees
- создать файл misc/api/user/fees/paths.yaml
- создать папку misc/api/user/fees/paths
- создать папку misc/api/user/fees/schemas
В остальном ничем не отличается от функционала в модулях.
Запускаем misc/api/generate_docs.pl и проверяйте bundle_admin.yaml
Поздравляем!
USER API
Создание роутов и определение
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
# HTTP метод
method => 'GET',
# Путь, начинается в /user/ и названием микромодуля
path => '/user/fees/',
# Определение эндпоинта
handler => sub {
my ($path_params, $query_params, $module_obj) = @_;
# ...
},
# Загружаемый модуль.
# Исторически функционал API делится по принципу Abills/mysql, так что мы можем немного сократить код.
# Мы не особенно рекомендуем использовать эту опцию в будущем, но ознакомиться считаем нужно.
module => 'Fees',
# Определяем нужные параметры для авторизации.
# USER - авторизация по header, полученном с /user/login
# USERSID - авторизация по cookie (в том числе для api_call)
# USERBOT - авторизация через наше API Bots
# PUBLIC - без авторизации
# Тоесть, в данном случае путь может работать как и с авторизованными пользователями, так и нет.
# Внутри хэндлера можно определять какой пользователь.
credentials => [
'USER', 'USERBOT'
]
}, |
Написание OpenAPI
OpenAPI для ядра находится в корне misc/api/(admin|user)/[module]
Так что для работы нам нужно:
- создать папку misc/api/user/fees
- создать файл misc/api/user/fees/paths.yaml
- создать папку misc/api/user/fees/paths
- создать папку misc/api/user/fees/schemas
В остальном ничем не отличается от функционала в модулях.
Запускаем misc/api/generate_docs.pl и проверяйте bundle_user.yaml
Поздравляем!
Практики
Но ещё другие рекомендации относительно ядра
Разделение описания пути и реализации
На данный момент пока что не существует решения.
Использование пропса module
Поскольку API ядра делится практически за тем же принципом что и файлы Abills/mysql, то можно при создании роута и его определении сократить код с
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
my $Fees = Fees->new($self->{db}, $self->{admin}, $self->{conf}); # ... |
до:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
module => 'Fees', |