Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Блок кода
languageperl
titleпуть /fees
collapsetrue
{
  # 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 в ABillS

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

Создание роутов и определение

Блок кода
languageperl
titleпуть /user/fees
collapsetrue
{
  # 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 в ABillS

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, то можно при создании роута и его определении сократить код с

Блок кода
languageperl
titleобычное написание
collapsetrue
my $Fees = Fees->new($self->{db}, $self->{admin}, $self->{conf});
# ...

до:

Блок кода
languageperl
titleпропс module
module => 'Fees',