Initial commit
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# REST API (richcode.api)
|
||||
|
||||
Главная техническая особенность проекта. Сторонний модуль **`richcode.api` версии 3.1.5** (2024-08-02) отдаёт наружу REST-интерфейс к сущностям сайта: товарам, заказам, складам, пользователям, сделкам. Через него данными можно управлять **без админки** — вероятно, ради этого он и стоит.
|
||||
|
||||
Проверено по коду модуля: `bitrix/modules/richcode.api/` (`include.php`, `options.php`, `lib/core/Route.php`).
|
||||
|
||||
## Точка входа и формат URL
|
||||
Запрос перехватывается обработчиком модуля на старте страницы (не через `urlrewrite.php`). Базовый путь задаётся в настройках модуля, по умолчанию `/api/`.
|
||||
|
||||
Структура адреса (из `lib/core/Route.php`):
|
||||
```
|
||||
/{apiPath}/{module}/{token}/{controller}/{action}
|
||||
```
|
||||
- `apiPath` — базовый путь (например `api`).
|
||||
- `module` — область: `iblock`, `sale`, `main`, `crm`.
|
||||
- `token` — токен авторизации (если включена авторизация по токену).
|
||||
- `controller` / `action` — что вызываем. Действие — это оставшиеся сегменты пути после контроллера, склеенные точкой (`…/order/status/set` → `status.set`).
|
||||
- Параметры: для GET — query-строка; для POST/PUT/DELETE — тело JSON (`Content-Type: application/json`).
|
||||
|
||||
Ответы — JSON (`lib/core/Response.php`).
|
||||
|
||||
## Что доступно (контроллеры)
|
||||
Из карты автозагрузки в `include.php`:
|
||||
|
||||
| Модуль | Контроллер | Назначение |
|
||||
|---|---|---|
|
||||
| `iblock` | `Element` | CRUD элементов инфоблока: свойства (в т.ч. UF), разделы, файлы, единицы измерения |
|
||||
| `sale` | `Order` | заказы: корзина, свойства заказа, оплаты, отгрузки |
|
||||
| `sale` | `Product` | товары каталога и остатки на складах |
|
||||
| `sale` | `Store` | склады и их остатки |
|
||||
| `sale` | `Measure` | единицы измерения |
|
||||
| `sale` | `Discount` | скидки |
|
||||
| `main` | `User` | создание/обновление пользователей |
|
||||
| `crm` | `Deal` | сделки (CRM) |
|
||||
|
||||
Важно: **каталог (инфоблок 2) обслуживает `sale/product`**, а `iblock/element` — только не-каталожные инфоблоки. Действия у них одинаковые.
|
||||
|
||||
> [!info] Полный список действий и примеры
|
||||
> Все действия каждого контроллера, их параметры и готовые примеры запросов `curl` вынесены в отдельный справочник — [[REST API — методы и примеры (richcode.api)]]. Он составлен по исходникам контроллеров, а не по догадкам.
|
||||
|
||||
## Авторизация
|
||||
- Включается опцией **«Авторизация по токену»** (`USE_AUTH_TOKEN`).
|
||||
- Токен хранится в поле пользователя **`UF_API_TOKEN`** (по коду `lib/core/Tokens.php`; в подсказке настроек оно ошибочно названо `UF_RESTFUL_API_TOKEN`). Токены генерируются в настройках модуля («Сгенерировать» / «Пересоздать»).
|
||||
- Токен передаётся **сегментом URL** (`…/{module}/{token}/{controller}/…`), а не заголовком — рабочий код читает его из пути. Пользователь-владелец токена должен состоять в заданной группе.
|
||||
- Каждый вызов идёт **от имени пользователя-владельца токена** — права API = права этого пользователя. Это важно для безопасности: см. [[Информационная безопасность (apelsincom)]].
|
||||
- Полная схема адресов, все действия и примеры `curl` — в [[REST API — методы и примеры (richcode.api)]].
|
||||
|
||||
## Настройки модуля (что где крутится)
|
||||
Опции (админка → Настройки → Список модулей → richcode.api, или в БД):
|
||||
|
||||
| Опция | Смысл |
|
||||
|---|---|
|
||||
| `USE_API` | включить/выключить API |
|
||||
| `API_PATH` | базовый путь (пример `/api/`) |
|
||||
| `USE_AUTH_TOKEN` | авторизация по токену |
|
||||
| `ONLY_HTTPS_EXCHANGE` | принимать только https |
|
||||
| `USE_BLACK_LIST_ADDRESS_FILTER` / `BLACK_LIST_ADDRESS` | чёрный список IP |
|
||||
| `USE_WHITE_LIST_ADDRESS_FILTER` / `WHITE_LIST_ADDRESS` | белый список IP |
|
||||
| `USE_ACCESS_CONTROL_ALLOW_ORIGIN_FILTER` | CORS-фильтр по домену |
|
||||
| `LOGGING` / `hl_logging` | лог запросов в highload-блок «Лог запросов» |
|
||||
|
||||
## Логирование
|
||||
При включённом `LOGGING` каждый запрос пишется в highload-блок (его ID — в опции `hl_logging`) с полями `UF_API_LOG_TIME`, `UF_API_LOG_URL`, `UF_API_LOG_METHOD`, `UF_API_LOG_DATA`. Удобно для отладки интеграций; помните, что в лог попадает тело запроса — не логируйте лишнего (ПДн).
|
||||
|
||||
## Поток запроса
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant C as Клиент
|
||||
participant R as richcode.api (Route)
|
||||
participant B as Bitrix (iblock/sale/main/crm)
|
||||
C->>R: HTTP /api/{module}/{token}/{controller}/{action} (+JSON)
|
||||
R->>R: проверка HTTPS / IP / CORS / токена
|
||||
R->>B: вызов контроллера от имени пользователя токена
|
||||
B-->>R: результат
|
||||
R-->>C: JSON-ответ (+ запись в лог, если включён)
|
||||
```
|
||||
|
||||
> [!warning] Что проверить и обезопасить
|
||||
> - Точный `API_PATH` и какие пользователи-токены заведены — по файлам не видно, смотрите настройки модуля.
|
||||
> - Включены ли `ONLY_HTTPS_EXCHANGE`, белый список IP и CORS — это ключевые меры защиты API.
|
||||
> - Токены = ключи от данных. Их хранение, ротация и права пользователей-владельцев — в [[Информационная безопасность (apelsincom)]].
|
||||
|
||||
## См. также
|
||||
- [[Информационная безопасность (apelsincom)]]
|
||||
- [[Интеграции (apelsincom)]]
|
||||
- [[Инфоблоки и каталог (apelsincom)]]
|
||||
Reference in New Issue
Block a user