# API на администрацията на CMS на Total.js: управление на сайт от код, архивиране и възстановяване

> JSON API зад администрацията на CMS на /admin/: форматът на заявките, действията на всяка добавка и техните права, качването на файлове и трите маршрута за архив, възстановяване и изчистване, включително какво наистина прави clear.

Framework: cms
Product: CMS (cms@8071e48)
Language: bg
Content-SHA256: 2325817b4dc2f568c19f74217d145f48fe22461384d2484b7f7394c3234fb53b
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Всичко, което прави интерфейсът на администрацията, минава през една-единствена крайна точка: `POST /admin/` с тяло `{ "schema": "<name>", "data": { ... } }` (API маршрутите на Total.js, вижте [API маршрути](/en/total5/api-routes/)). Адресът идва от реда `$api : /admin/` във файла `config`. Удостоверете се със сесийната бисквитка (`POST /admin/` със `schema: "login"` и `login` и `password`), със заглавката `x-token` или чрез OpenPlatform ([инсталиране и първо стартиране](/en/cms/install-and-first-start/)).

## Действията

| Добавка | Заявки (`schema`) | Право |
|---|---|---|
| Account | `login`, `logout`, `admin_read`, `admin_save` (име, login, парола), `account` | сесията |
| Pages | `pages_list`, `pages_read`, `pages_save`, `pages_clone`, `pages_remove`, `pages_links`, `pages_html` (чете HTML), `pages_save_html` (`id`, `html`, до 5 MB), `pages_copy` (`from`, `to`) | `pages` |
| Layouts | `layouts_list`, `layouts_read`, `layouts_save`, `layouts_clone`, `layouts_remove`, `layouts_html`, `layouts_save_html`, `layouts_import` | `layouts` |
| Widgets | `widgets_list`, `widgets_read`, `widgets_save`, `widgets_remove`, `widgets_detail` | `widgets` |
| Navigation | `nav_list`, `nav_read`, `nav_save`, `nav_remove`, `nav_editor` | `navigation` |
| Redirects | `redirects_list`, `redirects_read`, `redirects_save` (`url`, `target`, `permanent`), `redirects_remove` | `redirects` |
| Variables | `variables_read`, `variables_save` (`vars`) | `variables` |
| Posts | `posts`, `posts_read`, `posts_create`, `posts_update`, `posts_remove`, `posts_clear`, `posts_categories` | `posts` |
| Files | `files_list`, `files_rename`, `files_clear`, `files_remove`, и качванията по-долу | `files` |
| Settings | `settings_read`, `settings_save`, `settings_test` (изпробва настройките за SMTP), `chatgpt` | `settings` |
| Dashboard | `dashboard_online`, `dashboard_referers`, `dashboard_browsers`, `dashboard_pages`, `dashboard_stats` | няма |

Правото `admin` (и всеки потребител с флага `sa`, включително *Bot* на токена) може да ги използва всички. Заявка без право получава грешка, а `login` е единствената заявка, която не се нуждае от сесия.

Създайте страница и нейното съдържание:

```json
{ "schema": "pages_save", "data": { "name": "About", "layoutid": "<layout id>", "url": "/about/", "title": "About us" } }
{ "schema": "pages_save_html", "data": { "id": "<page id>", "html": "<h1>About us</h1>" } }
```

`pages_save` отговаря с `{ "success": true }`; прочетете идентификатора с `pages_list`. За layout `layouts_save` отговаря с идентификатора на layout-а в `value`. Когато при обновяване липсва поле, полето се изчиства (`title`, който не изпратите, се записва празен), затова изпращайте целия запис.

## Качване на файлове

`POST /admin/upload/` приема multipart качване (до 10 MB), а `POST /admin/upload/base64/` тяло JSON с data URI (png, jpeg или gif). И двата отговарят със списък от `{ id, name, type, ext, size, url }`, където `url` е `/download/<id>.<ext>`.

## Архив, възстановяване и изчистване

Три маршрута от `controllers/api.js` работят върху целия сайт и изискват правото `admin`:

| Маршрут | Какво прави |
|---|---|
| `GET /admin/backup/` | сваля цялото файлово хранилище (метаданни, HTML на страници и layout-и, файлове и публикации) като един текстов файл, наименуван по сайта и датата |
| `POST /admin/restore/` | качва такъв файл (до 100 MB) и го зарежда. |
| `GET /admin/clear/` | **изтрива съдържанието на сайта.** Изоставя файловото хранилище и го зарежда отново, така че страниците, layout-ите, уиджетите и останалото се премахват

Направете архив, преди да изпробвате някой от тях, никога не отваряйте `/admin/clear/` в браузър от любопитство и пазете токена в тайна: с него едно-единствено `GET` изпразва сайта.
