Child pages
  • Туториал по написанию API для модуля

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Данная страница документация не завершена.

Актуально на версию для версии 1.2022.00.

Table of Contents

Все действия будут производиться в папке модуля, например, Abills/modules/Portal.
За пример взят модуль Portal.

...

Code Block
languageperl
titleADMIN API роуты
#**********************************************************
=head2 admin_routes() - Returns available ADMIN API paths

=cut
#**********************************************************
sub admin_routes {
  my $self = shift;

  return [
    {
      method      => 'GET',
      # Абсолютный путь, за которым можно будет достучаться, например billing.url/api.cgi/portal/attachment
      path        => '/portal/attachment/',
      handler     => sub {
        # Динамически подключаем# Указываем "контроллер" для API /portal/attachment/*
      controller  require=> 'Portal::Api::admin::Attachment;',
      #  my $Attachment = Portal::Api::admin::Attachment->new($self->{db}, $self->{admin}, $self->{conf}, { Errors => $Errors });

        # Вызываем в контроллере функцию с аргументами именно для этого роута
        # (GET portal/attachment = get_portal_attachment) 
        return $Attachment->get_portal_attachment(@_);
      }Даём ссылку на функцию-эндпойнт контроллера
      endpoint    => \&Portal::Api::admin::Attachment::get_portal_attachment,
      credentials => [
		# Определяем нужные параметры для авторизации.
		# ADMIN    - API_KEY
        # ADMINSID - admin_sid по cookie (в том числе для api_call)
        'ADMIN', 'ADMINSID'
      ]
    },
  ]
}

...

Code Block
languageperl
titleUSER API роуты
#**********************************************************
=head2 user_routes() - Returns available USER API paths

=cut
#**********************************************************
sub user_routes {
  my $self = shift;

  return [
    {
      method      => 'GET',
      # Для USER API ОБЯЗАТЕЛЬНО начинаем абсолютный путь с /user/*.
      path        => '/user/portal/menu/',
      handler     => sub {
        # Динамически подключаемПодключаем "контроллер" для API /user/portal/*
       controller  require=> 'Portal::Api::user::News;',
        my $User_news = Portal::Api::user::News->new($self->{db}, $self->{admin}, $self->{conf}, { Errors => $Errors });

 # Даём ссылку на функцию-эндпойнт контроллера
      endpoint    return $User_news->get_=> \&Portal::Api::user::News::get_user_portal_menu(@_);
      },
      credentials => [
	    # Определяем нужные параметры для авторизации.
        # USER    - авторизация по header, полученном с /user/login
        # USERSID - авторизация по cookie (в том числе для api_call)
        # PUBLIC  - без авторизации
        # Тоесть, в данном случае путь может работать как и с авторизованными пользователями, так и нет.
        # Внутри хэндлера можно определять какой пользователь, об этом ниже.
        'USER', 'USERSID', 'PUBLIC'
      ]
    },
  ]
}

...