Framework foton
Инструмент для профессиональной разработки web приложений
Структура микросервисов

Микросервисы распологаются по адресу:
dev/service/

 


В директории event находятся json файлы очереди, в директории log находится  файл key.json — сгенерированный ключ доступа, после получения рекомендуется его удалить.
В директории request находятся логи запросов по методам 

 

event — события обработки очереди, nomethod — если метод не подошел ни под один из стандартных
В директории micro находятся все микросервисы нашей системы.

 

Setting.json — основной файл настроек микросервиса:

{    
    "auth":{ //здесь содержатся настройки авторизации   },
    "format":"xml",  //стандартно может быть xml,json,txt
    "log":false/true,  //пишем или не пишем логи
    "event":"event", //имеет три варианта event,api,data
    "name":"service", //навание сервиса
    "arg":[{         //параметры вызова
        "model":"html",
        "table":"seo",
        "methods":{"echo":{"data":true}},
        "format":"X" 
    }],     
    "services":
    { //микросервисы для вызова при event:event
        "servis1":
        {
            //микросервис 1
        },        
        "servis2":
        {
           //микросервис 2
        }        
    }  
}

Авторизация:

всего три типа авторизации: базовая авторизация, по ключу и по токену 
базовая авторизация:
Лежат в файле /.htpasswd

"auth":{
    "login":"ваш логин",
    "pass":"пароль",
    "realm":"ключ для сессии",
    "type":"base"
},

Для запроса передаем в базовой авторизации пароль и логин
Авторизация по ключу:
Для генерации ставим в настройках

"auth":{
    "key":"новый ключ",
    "type":"key"
}

Запускаем микросервис
Переходим в /dev/service/log/key.json
Копируем  хеш ключа и удаляем файл с ключом
сохраняем новые настройки

"auth":{
    "key":"ключ",
    "type":"pass",
    "secret_key":"хеш ключа"
},

для запроса передаем secret_key=хешключа
Авторизация по токену:

"auth":{
    "realm":"token",
    "type":"token"
},

Создаем файл токена token.php в корне директории микросервиса 
Создаем ключ например зависящий от дня или часа
$token = date(«Ymd»).’mytoken’
при запросе передаем get параметр token

Формат вывода:

 свой тип можно добавить в настройках $arr[route] /core/setting/custom.php
Для того, чтобы ваш формат заработал необходимо добавить файл в директорию /dev/service/micro/api/return/format/ 
ваш_формат.tpl или ваш_формат.php — например json.tpl
В файле tpl для вывода используем конструкцию @{data} содержащую строку данных для вывода, а также можно использовать все конструкции шаблонизатора Foton,
В файле php выводим переменную $data, например вот так

События event:

Для работы с событием data необходимо наличие метода data в контроллере микросервиса 
dev/service/micro/вашмикросервис/return/class.php

<?
namespace Micro;
class Название_микросервиса_как_директории{
    public $core;
    public function __construct()
    {
        $this->core = new \Foton\Core;
    }
    public function event($arr){
        return $arr;
    }
    public function arg($arr){
        return $arr;
    }
    public function input($arr){
        return $arr;
    }
    public function post($arr){
        return $arr;
    }
     public function get($arr){
        return $arr;
    }
    public function data($param){    
        $event = $param->event;  
        $get = $param->get;    
        $post = $param->post;    
        $arg = $param->arg;   
        $input = $param->input;      
    }
}

Методы get,post,input,event,arg — необязательные, но для получения доступов к get,post параметрам необходимо создать методы и обращаться из метода data к соответствующим обьектам get,post, для получения тела запроса соответственно необходимо создать метод input и обратиться к свойству input, для получения аргументов из настроек arg — соответственно неоходим метод и свойство arg, но если этот микросервис также возможно будет использовать другие сервисы укажите event — он соберет в зависимости от запроса тело запроса, аргументы, get и post данные в один массив данных

Событие api — для этого события необходимо указать массив настроек arg содержащий параметры вызова:

"arg":[{         
    "model":"модель",
    "table":"таблица",
    "methods":{"echo":{"data":true}},
    "format":"формат X или J или O"  //X — xml,J-json,O — object
    "method":"метод вызова", //list,echo,update,delete,insert — подробнее в документации по REST API
    "page":"0", // страница для вывода для метода list
    "count":"1", // количество элементов для метода list
    "where":{"id":5}, //условие для вывода или обновления/удаления
    "id":"1", //для метода echo
    "key":"demo", //ключ для доступа дублируется из auth
    "secret_key":"$2y$10$eZF/hrVohInhNB73CIW6/O3wX/px5VNMnGNt/D40MdhPd2SWgIFzK" //хеш ключа дублируется из auth
}],


Работа с Event

Для создания микросервисной архитектуры используется хореография, то есть каждый микросервис самостоятельно запускает другие микросервисы в очередь.
Для запуска очереди достаточно обратится к all.micro через CLI — php foton micro 1 0 — за один этап обработается один микросервис начиная с 0

Для создания такого микросервиса необходимо в настройке setting.json создать массив servers

"services":
{
    "servis1":
    {
        "auth":{
            //данные авторизации
        },
        "host":"хост, //например http://сайт/имямикросервиса.micro или main — если микросервис на вашем сервере",
        "event":"событие",
        "name":"имямикросервиса",
        "log":true/false, //логирование 
        "format":"формат",
        "function":"функция setting" // — изменит необходимые настройки в вызове дочернего микросервиса",
        "where":["функция проверки,значение"],//проверяет соответствует ли результат функции в вашем родительском микросервисе, если нет, то очередь не будет создана, обязателен для rollback функции
        "rollback":"функция  rollback" // — передаст параметры микросервису в случае отмены операции на его стороне",
        "arg":[{
            //аргументы — можно взять из массива arg микросервиса или же использовать свои
        }]
    }
}

Функция setting может также устанавливать время и размер обработки данных

<?php
public function setting($setting){
    $setting['arg'][0]['count'] = 5; 
    $setting['arg'][0]['method'] = 'list';//установит новые значения аргументов
    $setting['date'] = "2025-08-12"; //установит дату выполнения микросервиса
    $setting['count'] = 2; //установит разбиение по 2 элемента
    return $setting;
}

Важно!!! Перед работой с системой необходимо в основном файле настроек core/setting/main.php сменить настройку micro с false на true, перед этим предварительно необходимо изменить все ключи для доступа к системе, информацию об этом можно посмотреть в каждм файле setting.json каждого микросервиса в системе, например dev/service/micro/alisa/setting.json, при указании типа авторизации token, он заполняется в файле token.php, если это базовая авторизация, то доступ указывается в самом файле настроек, а также в файле .htpasswd в корне сайта и т. д., подробнее описано в разделе Авторизация данной документации.
© Copyright 2026 Разработано на Framework Foton
Продукт зарегистрирован в Роспатенте