Приложение C: Типы стандартной библиотеки
Стандартная библиотека поставляет двенадцать пакетов типов, сгруппированных по назначению:
- Backend и данные —
arch.backend(сервисы, базы данных, кэши, брокеры сообщений, инфраструктура, observability и типы интерфейсов на уровне протокола) иarch.data(аналитический уровень, которыйarch.backendне покрывает: пайплайны, хранилища данных, BI-инструменты) - Диаграммы и визуалы —
arch.c4(модель C4),arch.diagrams(ER/табличные диаграммы),arch.extras(обобщённые действующие лица и устройства) иarch.ui(общий набор иконок/бейджей, которым рендерятся остальные пакеты — сам напрямую черезuseне подключается) - Облако —
arch.cloud.aws,arch.cloud.gcp,arch.cloud.azure(каталоги сервисов провайдеров, надстроенные надarch.backend) - Governance —
arch.policy(проверяемые политики архитектурного ревью) иarch.org(плоскость владения — команды/департаменты/гильдии) - AI —
arch.ai(обслуживание моделей, ML-платформа и типы LLM-приложений)
Эта глава подробно документирует два пакета общего назначения — arch.backend и arch.extras. Относитесь к стандартной библиотеке как к палитре, из которой выбираешь нужное, — импортируйте конкретные нужные типы вместо use * (никогда не делайте use * для стандартной библиотеки; это затягивает всю поверхность). Подключайте их на уровне пространства (в вашем package.archspace), чтобы палитра была доступна во всём пространстве:
use service, database, gateway from arch.backenduse user, usergroup from arch.extrasuse table, column from arch.diagrams # optional — adds the diagram typesВсе пакеты автоматически разрешаются против стандартной библиотеки, входящей в набор инструментов, — запись в dependencies не нужна.
Общие типы модулей (arch.backend)
Заголовок раздела «Общие типы модулей (arch.backend)»| Тип | Обязательные пустые слоты | Значения по умолчанию | Виджет по умолчанию |
|---|---|---|---|
frontend | required aspect domain | aspect team | arch-module |
component | — | aspect team | arch-module |
system | — | aspect team | arch-module |
external_system | required ext.vendor, required ext.contract.url | — | arch-module (пунктир, чип vendor) |
Фигуры людей и устройств (arch.extras)
Заголовок раздела «Фигуры людей и устройств (arch.extras)»| Тип | Обязательные пустые слоты | Значения по умолчанию | Виджет по умолчанию |
|---|---|---|---|
user | — | — | arch-user |
usergroup | — | — | arch-usergroup |
laptop / tablet / smartphone / desktop / server / cloud | — | — | по фигуре |
team нигде в стандартной библиотеке не является обязательным слотом — каждый тип каскадирует его мягко, поэтому модель проходит валидацию без владельцев, а их можно дозаполнить позже.
Типы модулей (arch.backend)
Заголовок раздела «Типы модулей (arch.backend)»Все backend-типы модулей мягко каскадируют team и aspect domain (ничего не обязательно).
| Тип | Значения по умолчанию | Примечания |
|---|---|---|
service | aspect team, aspect domain | Обобщённый backend-сервис. |
database | aspect team, aspect data.classification | Подтипы по семейству (relational, document, kv_store, hyperscale, search_index, columnar, cold_storage, graph_db, timeseries, vector, object_storage) и по движку (postgres, mongodb, redis, …). |
cache | наследует от database | Подтип database с приземистым цилиндром. |
message_broker | aspect team, aspect domain | Подтипы по семейству (kafka_cluster, redpanda, pulsar, rabbitmq, activemq, nats_server, mqtt_broker, redis_streams, nsq, …). |
gateway | aspect team, aspect domain | Edge-proxy / API-gateway / обратный прокси. |
load_balancer | aspect team, aspect domain | Балансировка трафика L4/L7 по репликам. Близок к gateway. |
service_mesh | aspect team, aspect domain | Подтипы istio, linkerd, consul_connect, kuma, cilium. |
service_discovery | aspect team, aspect domain | Реестр сервисов / плоскость конфигурации. Подтипы consul, zookeeper, eureka, nacos. |
feature_flags | aspect team, aspect domain | Подтипы unleash, flagsmith, flipt, growthbook. |
bpm_system | aspect team, aspect domain | Оркестратор workflow. Подтипы по движку (camunda, temporal, airflow, n8n, …). |
identity_provider | aspect team, aspect domain | OIDC / SSO-провайдеры. Подтипы keycloak, zitadel, authentik, authelia, ory, dex, supertokens, casdoor, fusionauth. |
secrets_manager | aspect team, aspect domain | Хранилище секретов / ключей. Подтипы vault, openbao, infisical. |
observability | aspect team, aspect domain | Телеметрия. Подтипы по сигналу: metrics_system, logging_system, tracing_system, dashboard, collector, alerting, apm (у каждого — подтипы по вендору). |
Чтение таблиц:
- Обязательные пустые слоты должны быть заполнены или сброшены каждым экземпляром.
- Значения по умолчанию — это предзаданные поля, которые экземпляр наследует (с семантикой каскада там, где она указана).
- Виджет по умолчанию — тег пользовательского элемента, которым отрисовывается экземпляр (каскадируется через
cascade widget: ...).
Импорт нужных типов из arch.backend и arch.extras сразу даёт рабочие визуалы — собственный widgets: скрипт не требуется.
Типы поверхностей
Заголовок раздела «Типы поверхностей»Стандартная библиотека определяет:
surface— обобщённый базовый тип, без значений по умолчанию, без обязательных пустых слотов.rest_crud(вarch.backend) — связываетrest_list/rest_create/rest_read/rest_update/rest_deleteкакlist/create/read/update/delete.
Пользовательские типы поверхностей (resource, capability, endpoint_group) обычно объявляются для каждого проекта. См. главу 6 и главу 16.
Типы интерфейсов (arch.backend)
Заголовок раздела «Типы интерфейсов (arch.backend)»Типы интерфейсов на уровне протокола. Соглашение по оформлению рёбер: синхронные request/response — сплошная линия; асинхронные / стримовые / pub-sub — пунктирная.
| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
http | interface | сплошной | Базовый HTTP. |
http_get / http_post / http_put / http_patch / http_delete / http_head / http_options | http | сплошной | По одному на HTTP-метод. |
webhook | http | пунктир | Исходящий fire-and-forget колбэк. |
sse | http | пунктир | Server-sent events. |
rest | http | сплошной | HTTP с ресурсной семантикой. |
rest_list / rest_create / rest_read / rest_update / rest_delete | rest | сплошной | Пять REST-глаголов. |
| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
grpc | interface | сплошной | Базовый gRPC. |
grpc_unary | grpc | сплошной | Один запрос, один ответ. |
grpc_server_stream / grpc_client_stream / grpc_bidi_stream | grpc | пунктир | Стримовые варианты. |
GraphQL
Заголовок раздела «GraphQL»| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
graphql | interface | сплошной | Базовый GraphQL. |
graphql_query / graphql_mutation | graphql | сплошной | Синхронные операции. |
graphql_subscription | graphql | пунктир | Асинхронный push-поток. |
WebSocket
Заголовок раздела «WebSocket»| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
websocket | interface | пунктир | Двусторонний, долгоживущий. |
Messaging
Заголовок раздела «Messaging»| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
kafka | interface | пунктир | Топики распределённого лога. |
amqp | interface | пунктир | Открытый AMQP wire-протокол. |
nats | interface | пунктир | Лёгкий pub/sub по subjects. |
mqtt | interface | пунктир | IoT pub/sub по топикам. |
redis_pubsub | interface | пунктир | Каналы Redis pub/sub. |
Доступ к данным
Заголовок раздела «Доступ к данным»| Тип | Родитель | Стиль | Семантика |
|---|---|---|---|
db_read | interface | сплошной | Read-доступ к database / cache. |
db_write | interface | сплошной | Write-доступ к database / cache. |
Асинхронные/событийные интерфейсы (любые пунктирные) — это то, чем моделируются события: они достигаются обычным ребром процесса >, а не полем subscribes: (отдельной конструкции события или подписки нет).
Типы, локальные для проекта
Заголовок раздела «Типы, локальные для проекта»Объявляйте собственные типы, когда предметный словарь предпочтительнее типов на уровне протокола. См. главу 16.
// In your project's types.archexport type service internal_service { required aspect team aspect { security.zone: "Internal" }}Затем используйте тип где угодно в пакете:
internal_service AuthService { aspect team: "Platform" rest_create authenticate}Чтобы сделать локальный для проекта тип видимым другим пакетам, пометьте его export и импортируйте через use … from <your.package> в их package.archspace.
См. также
Заголовок раздела «См. также»- Глава 4: Модули — типы модулей в подробностях
- Глава 5: Интерфейсы — типы интерфейсов в подробностях
- Глава 16: Определение типов — объявление собственных
- Глава 20: Виджеты — как рендерятся виджеты типов