DLE API
  • Автор темы Автор темы Maxim
  • Дата начала Дата начала
привет , настройки бы для nginx )) ото думаю из за этого в место api проста страница открывается )) если у каго то есть напишите плиз , если сам найду тоже напишу ))
 
привет , настройки бы для nginx )) ото думаю из за этого в место api проста страница открывается )) если у каго то есть напишите плиз , если сам найду тоже напишу ))
Я не знаком с nginx, но это должно помочь

[CODE lang="nginx" title="nginx"]location /api/ {
try_files $uri /index.php?$args;
}
[/CODE]
 
Я не знаком с nginx, но это должно помочь

[CODE lang="nginx" title="nginx"]location /api/ {
try_files $uri /index.php?$args;
}
[/CODE]
спасибо большой за подсказку и за то что отписались )) пробовал этот вариант не помогло ))) я нанял програмиста опытного в nginx посмотрим что будет ))) там не проста оказалось с этим ))) если получется скину код ))
 
location /api/v1/ {
alias /home/web_public/домен сайта/public_html/api/;

error_log /var/log/nginx/api_debug.log debug;

if (!-f $request_filename) {
rewrite ^/api/v1/(.*)$ /api/index.php?path=$1 last;
}

location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php/php8.1-fpm-домен сайта.sock;
include /home/web_public/conf/web/домен сайта/nginx.fastcgi_cache.conf*;
}
}


вот конфиг nginx , домен сайта меняем на ваш домен + проверяем пути правильно ли указана , в вашем nginx конфиге пути есть
смотрите с конфига , в моем конфиге вставлен этот код после кода блока location от dle в низу ,
после вставки в низу этого кода остается два блока location , лудше использовать Notepad++ так как
он показывает блоками .
 
еще заметил нюанс (Загрузка резервной копии с диска) востановление бд с админке выводить ошибку ,
Установлена кодировка соединения utf8mb4.
Таблица dle_admin_logs.
Таблица dle_admin_sections.
2025.01.03 16:54:25
Возникла ошибка!
Неправильный запрос.Cannot delete or update a parent row: a foreign key constraint fails (256) at the file /home/web_public/web/am.online/public_html/engine/inc/dumper.php (651) после (dle_admin_sections) как раз бд ключа api , не думаю что это совпадение но 100 % не уверен )))
 
Maxim обновил(а) ресурс DLE API новой записью:

fix(api): обновление маршрутизации

  • [FIX] Исправлена заявленная ошибка для запросов POST & PUT
  • [UPDATE] Обновлено до версии DLE 17.3
  • [UPDATE] Обновлено до версии PHP 8.3 (Она же является минимальной)
  • [UPDATE] Переструктурирована сама логика работы с CRUD запросами

Узнать больше об этом обновлении...
 
Maxim обновил(а) ресурс DLE API новой записью:

Версия 173.0.37

  1. Обновление совместимости:
    • Поддержка DLE 17 и MySQL версии 5.7.
  2. Улучшение проверки маршрутизации:
    • Добавлена проверка запрещенных маршрутов.
    • Обеспечение существования запиваемого маршрута его подключением.
  3. Парсинг тела запроса:
    • Внедрение middleware для маршрутизации в API.
  4. Оптимизация кода:
    • Удалены неиспользуемые импорты в файле маршрутов post.
  5. Исправление...

Узнать больше об этом обновлении...
 
Maxim обновил(а) ресурс DLE API новой записью:

Версия 173.0.38

  • Исправление: Устранены мелкие проблемы с маршрутизацией, что улучшает стабильность работы приложения.
  • Обновление: Изменён класс работы с базой данных на illuminate/database, что позволяет использовать более современные подходы к взаимодействию с базой данных.
  • Обновление: Пересмотрен подход к маршрутизации, что улучшает структуру и читаемость кода.
  • Нововведение: Добавлен новый маршрут для поиска по значениям /search/{db_table}. Подробности можно...

Узнать больше об этом обновлении...
 
Добрый день. Подскажите, а как правильно совершить запрос на поиск той или иной новости? В Postman не нашел ничего подобно. Аналогично и по пагинации
При разработке мобильного приложения тоже столкнулся с отсутсвием пагинации в API. Решил сам добавить ключ offset. Кому интересно можете потестить.
Изменив эти два метода, появится возможность использования ключа offset, а следовательно загружать новости порционно.

PHP:
/**
 * Разбирает параметры запроса, извлекая требуемые значения.
 *
 * @param array $params Массив параметров запроса, обычно из query string.
 * @param array $header Массив параметров заголовков запроса.
 *
 * @return array Массив из четырёх значений:
 *               - Значение параметра "orderby" (или замена по умолчанию).
 *               - Значение параметра "sort" (или замена по умолчанию).
 *               - Значение параметра "limit" (или null, если не указано).
 *               - Значение параметра "offset" (или null, если не указано).
 */
public function parseParameters(array $params, array $header): array {
    $orderBy = $this->findParameter('orderby', $this->orderBy, $params, $header);
    $sort    = $this->findParameter('sort', $this->sort, $params, $header);
    $limit   = $this->findParameter('limit', null, $params, $header);
    $offset  = $this->findParameter('offset', null, $params, $header);

    return [$orderBy, $sort, $limit, $offset];
}



/**
 * Обрабатывает GET-запрос, извлекает данные из базы данных с учетом фильтров и прав доступа,
 * возвращает результат в формате JSON.
 *
 * @param ServerRequestInterface $request  Запрос от клиента.
 * @param ResponseInterface      $response Ответ для клиента.
 * @param array                  $args     Массив аргументов маршрута.
 *
 * @return ResponseInterface Ответ с данными или сообщением об ошибке.
 *
 * @throws \Error|\JsonException Если возникает ошибка при проверке API-ключа или построении SQL-запроса.
 */
public function handleGet(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface {
    $header = $this->parseHeader($request);
    $params = $request->getQueryParams() ?: [];
    [$orderBy, $sort, $limit, $offset] = $this->parseParameters($params, $header); // Добавляем offset
    $api_key = $this->extractApiKey($params, $header);

    $checkAccess = checkAPI($api_key, $this->table);
    if (isset($checkAccess['error'])) {
        return ErrorResponse::error($response, 405, $checkAccess['error']);
    }

    $this->access['full']     = $checkAccess['admin'];
    $this->access['can_read'] = $checkAccess['read'];
    $this->access['own_only'] = $checkAccess['own'];

    if ($this->access['full'] || $this->access['can_read']) {
        $limitClause = $limit ? "LIMIT " . (int)$limit : '';
        $offsetClause = ($offset !== null && $limit) ? "OFFSET " . (int)$offset : '';  // Добавляем OFFSET, только если указан limit

        $possibleParams = '';

        $filters       = $this->buildFilters($header);
        $accessFilters = $this->buildAccessFilters();
        if (count($filters)) $possibleParams = 'WHERE ' . implode(' AND ', $filters);
        if (count($accessFilters)) {
            if (strlen($possibleParams)) {
                $possibleParams .= 'WHERE ' . implode(' OR ', $accessFilters);
            } else {
                $possibleParams .= ' AND (' . implode(' OR ', $accessFilters) . ')';
            }
        }
    } else {
        return ErrorResponse::error($response, 405);
    }

    $sql = "SELECT * FROM {$this->prefix}_{$this->table} {$possibleParams} ORDER BY {$orderBy} {$sort} {$limitClause} {$offsetClause}";

    $getData = new CacheSystem($this->table, $sql);
    if (check_response($getData->get())) {
        $data = $this->db::select($sql, []);
        $getData->setData($data);
        $data = $getData->create();
    } else {
        $data = $getData->get();
    }

    return ErrorResponse::success($response, $data, 200);
}
 
В DLE API 180.0.39 заметил, что выборочные права, которые разрешают в ту или иную таблицу делать зпросы совсем не работают. Работает только, если поставить галочку "Полный доступ"

Хочу понять это у всех так или только у меня? Тестирую на DLE 17.3/18, PHP8.3, и на Nginx, и Apache ситуация та же самая. А так же при полном доступе post запросы проходят успешно данные записываются, но успешного ответа нет, лишь ошибка:

Код:
Slim Application Error
The application could not run because of the following error:

Details
Type: TypeError
Code: 0
Message: fwrite(): Argument #2 ($data) must be of type string, stdClass given
File: \home\user\site.com\api\vendor\slim\psr7\src\Stream.php
Line: 333
 
При разработке мобильного приложения тоже столкнулся с отсутсвием пагинации в API. Решил сам добавить ключ offset. Кому интересно можете потестить.
Изменив эти два метода, появится возможность использования ключа offset, а следовательно загружать новости порционно.
Добавлю по умолчанию в следующем релизе
must be of type string, stdClass given
Гляну, что там передаётся
 
,
Все файлы и изображения загружаем на форум!
Назад
Сверху