ghiyam/apix

Yii2 module supporting universal client-server requests to the external API

Maintainers

Details

github.com/Ghiya/apix

Source

Installs: 89

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 1

Type:yii2-extension

2.0.2 2021-10-14 12:59 UTC

README

2.0.2

Универсальный плагин динамических клиент-серверных запросов к API внешних сервисов в приложениях Yii2 framework.

Как это работает?

Плагин APIx является модулем и отвечает при обработке запросов за конфигурацию сервисов API и соответствующий роутинг. Каждый сервис представлен контроллером и его действия определяют запросы к API этого сервиса. Плагин содержит объекты интегрированных клиентов для cURL/SOAP/SMPP соединений с API, которые предполагается наследовать в конкретных реализациях.

Конфигурация сервисов

Каждый из сервисов API представляется соответствующим контроллером, поэтому все используемые сервисы конфигурируются в параметре controllerMap модуля плагина. Действие контроллера должно возвращать массив параметров запроса/запросов в формате указанном ниже.

Note: Для корректной работы контроллера сервиса API требуется унаследовать его от [\ghiyam\apix\controllers\ServiceController].

[
    // ...
    'modules'    =>
        [
            'apix' => [
                'class' => 'ghiyam\apix\APIx',
                'controllerMap' => [
                    // API service with REST client example
                    'some_vendor'    =>
                        [
                            // default controller class is abstract, use inheritance instead
                            'class'      => 'ghiyam\apix\controller\ServiceController',
                            'service' =>
                                [
                                    'client' => [
                                        // default client class is abstract, use inheritance instead
                                        'class'         => '\ghiyam\apix\clients\CurlApiClient',
                                        'credentials'   => [],
                                        'clientOptions' => [
                                            'host'    => 'someHost',
                                            'port'    => 443,
                                            'uri'     => 'path/to/api/uri',
                                            'timeout' => 3,
                                        ]
                                    ],
                                ],
                        ],
                    // API service with SOAP client example
                    'another_vendor' =>
                        [
                            // default controller class is abstract, use implementation instead
                            'class'      => 'ghiyam\apix\controller\ServiceController',
                            'service' =>
                                [
                                    'client' => [
                                        // default client class is abstract, use inheritance instead
                                        'class'       => '\ghiyam\apix\clients\SoapApiClient',
                                        'credentials' => [],
                                        'namespaces'  =>
                                            [
                                                'header'   => '',
                                                'envelope' => '',
                                            ],
                                        'clientOptions' => [
                                            'location'     => '',
                                            'uri'          => '',
                                            'trace'        => true,
                                            'compression'  => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
                                            'exceptions'   => false,
                                            'soap_version' => SOAP_1_1,
                                            'encoding'     => 'UTF-8',
                                        ],
                                    ],
                                ],
                        ]
                    // ... any other API clients implementations...
                ],
            ],
        ],
    //...
]

Построение запросов

Каждый запрос должен содержать обязательный параметр method и необязательные параметры params. Первый содержит название метода в обращении к сервису API, второй - его параметры.

Пример построения запроса


[
    'method' => '<api_method_name>',
    'params' =>
        [
            '<param_name>' => '<param_value>'
            // ... API method params here ...
        ]
]