Наши ценности как платформенной команды
🥺 Платформенная команда каждый раз пишет, то как должна называться модель или какой префикс должен быть у модели в соответсвии с принципами
🥺 Платформенная команда вручную смотрит каждый пр спек
🥺 Платформенная команда форсирует стайлгайд вручную
🥺 Платформенная команда иногда растягивает ревью спек на 2-3 дня
Идеальная ситуация в выдуманном мире:
Человек из продуктовой команды открывает пр в sdk, его смотрят его же члены продуктовой команды, пр висит не больше дня, далее оказывается в мастере
Хорошая ситуация:
Человек из продуктовой команды открывает пр, его смотрит платформенная команда, но обсуждения по стилистике неймингу и принципам сведены к нулю
Гипотеза: кажется нам нужно автоматизировать этот процесс, используя линтер
Текущая реализация языка tinyspec неподдерживаемая и тяжело расширяемая
Tinyspec - one pass compiler
Tinyspec базируется на регулярных выражениях
Такие сложные регулярные выражения приносят в компиляторы не только нерасширяемость, но и недерминистичность синтаксиса. То есть другими словами никто доподлинно сейчас не ответит какую комбинацию символов и newlin'ов тайниспек сможет распарсить а какую нет.
`/industries`:
$L /industries ?branch?
Запрещаем теги для эндпоинтов без ``
❌ bad
Kek:
POST /industies
✅ good
`Kek`:
POST /industies
Запрещаем inline query
❌ bad
POST /industies?filter=
✅ good
POST /industies?SomeQuery
Запрещаем new:message синтакс для ключей объектов
WSEventsFromServerForAgent {
messages:new?: WSOnNewMessageForAgent,
messages:update?: WSOnUpdateMessageForAgent,
}
Запрещаем $CRUDL
@token $CRUDL /conversations/:id/messages
😍 Возможность писать кастомные правила
😍 Удобный интерфейс (абстракция) для описания правил
Demo time!
Rule typecheck
Потенцаильная возможность для развития и поддержки данной технологии
Не отставать от современного opensource и идти в ногу со временем
На текущий момент tinyspec не совместим с форматом openapi
Историческая справка
Openapi стал популярен в момент выхода спецификации v2. Примерно в это время появился tinyspec. Tinyspec позиционируется как DSL совместимый с openapi v2
Openapi3 сейчас чаще всего называется Swagger
Сила спецификации в том, что когда ты читаешь спецификацию, можно ожидать от программ имплементирующих данную спецификацию, что они будут работать корректно - в соответствии с данной спецификацией
Действительно ли tinyspec следует openapi2?
Это ложь
AnyOf никогда не был частью openapi v2
Мы застряли в чистилище между двумя спецификациями и придумываем нашу собственную
Почему вообще использовать openapi 2, когда по всему миру шагает openapi 3?
✨ Текущая реализация языка tinyspec неподдерживаемая и тяжело расширяемая
✨ Обратная совместимость с текущей реализацией*
✨ Легкость поддержки любыми разработчиками
✨ Линтер должен быть легко расширяемым новыми правилами, правило можно писать из вне
✨ Возможность постепенной миграции
✨ Потенцаильная возможность для развития и поддержки данной технологии
✨ Не отставать от современного opensource и идти в ногу со временем
Demo time!
🚀 Printer (WIP) - watch an example in slack
🚀 Compiler (WIP)
🚀 Обучение и презентации для продуктовых команд
🚀 Документация
Roadmap