План унификации REST URL (фаза 2)
Статус: фаза 2 выполнена. PHP, OpenAPI, скиллы и клиенты на каноне {product}/{slug}/v1. Dual-register / alias / rewrite нет. Ст арый URL — 404. Таблицы ниже — исторический mapping old → new.
Эта страница была планом работ. Namespace в PHP в фазе 1 не менялись; фаза 2 сменила URL без dual-route.
Вход: инвентарь ручек (текущие URL).
Единая схема
Все REST всех продуктов — одна форма:
{product}/{slug}/v1
| Часть | Значение |
|---|---|
{product} | REST-префикс продукта. Плагины: wp2lms, wp2lms-pro, wp2tutor, wp2tutor-forms, wp2tutor-bot, wp2app. WP2 Platform — исключение: в URL не wp2platform, а wp2. Plugin id / репозиторий остаются wp2platform. |
{slug} | идентификатор модуля (в ядре плагина или в аддоне — без разницы) |
v1 | версия REST этой семьи |
Отдельного шаблона «ядро = {product}/v1» нет. Новый модуль регистрирует только {product}/{slug}/v1. {product} = REST-префикс владельца (для platform это wp2, не id плагина).
Запрещено в новом коде:
{product}/module/{slug}/v1{product}/v1без сегмента модуля- REST-префикс
wp2platform/…(только снимаемый старый код) - чужой корень (
wp2lms-local-sync,wp2turbo, общиеwp2tutor/v1у forms/bot)
Старые адреса не поддерживаем: нет dual-register, нет deprecated alias в OpenAPI, нет rewrite в nginx, нет «срока снятия». В одном изменении PHP регистрирует только канон, клиенты (Studio, скиллы, SPA, CLI, админки) переезжают вместе. Старый URL — 404.
Эталон формы {product}/{slug}/v1 уже в коде:
- Embed Packages
wp2lms-pro/embed-packages/v1 - Studio Sync
wp2/studio-sync/v1— PHPsrc/Modules/StudioSync/, клиентSTUDIO_SYNC_REST_BASE, CLIwp studio-sync. Не переделывать (в т.ч. не сводить кwp2/studio/v1).
Media Playback сейчас wp2/media-playback/v1 — в фазе 2 на wp2/media-playback/v1. Dual-register Embed Packages (wp2platform/module/embed-packages/v1) снимаем.
Состав path: slug только в namespace
Полный URL: /wp-json/{product}/{slug}/v1{route}.
{slug} не повторять в {route}. Если сейчас slug сидит в route (wp2/license/v1/products), после переезда он уходит в namespace, route начинается со следующего сегмента (/products).
| Было | Стало |
|---|---|
{product}/module/{slug}/v1{route} | {product}/{slug}/v1{route} — тот же {route} |
{product}/v1/{slug}{route} | {product}/{slug}/v1{route} |
чужой корень {legacy}/v1{route} | {product}/{slug}/v1{route} |
Исключение только если {route} после вырезания slug стал бы пустым: тогда канон — GET|POST …/{product}/{slug}/v1 (корень модуля) или явный короткий resource (/chat). Ниже для каждой такой семьи выбран один вариант, без «или».
blog_id и прочие query не входят в namespace; остаются query, как сейчас.