Перейти к содержимому

Приложение 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)
  • Governancearch.policy (проверяемые политики архитектурного ревью) и arch.org (плоскость владения — команды/департаменты/гильдии)
  • AIarch.ai (обслуживание моделей, ML-платформа и типы LLM-приложений)

Эта глава подробно документирует два пакета общего назначения — arch.backend и arch.extras. Относитесь к стандартной библиотеке как к палитре, из которой выбираешь нужное, — импортируйте конкретные нужные типы вместо use * (никогда не делайте use * для стандартной библиотеки; это затягивает всю поверхность). Подключайте их на уровне пространства (в вашем package.archspace), чтобы палитра была доступна во всём пространстве:

use service, database, gateway from arch.backend
use user, usergroup from arch.extras
use table, column from arch.diagrams # optional — adds the diagram types

Все пакеты автоматически разрешаются против стандартной библиотеки, входящей в набор инструментов, — запись в dependencies не нужна.

ТипОбязательные пустые слотыЗначения по умолчаниюВиджет по умолчанию
frontendrequired aspect domainaspect teamarch-module
componentaspect teamarch-module
systemaspect teamarch-module
external_systemrequired ext.vendor, required ext.contract.urlarch-module (пунктир, чип vendor)
ТипОбязательные пустые слотыЗначения по умолчаниюВиджет по умолчанию
userarch-user
usergrouparch-usergroup
laptop / tablet / smartphone / desktop / server / cloudпо фигуре

team нигде в стандартной библиотеке не является обязательным слотом — каждый тип каскадирует его мягко, поэтому модель проходит валидацию без владельцев, а их можно дозаполнить позже.

Все backend-типы модулей мягко каскадируют team и aspect domain (ничего не обязательно).

ТипЗначения по умолчаниюПримечания
serviceaspect team, aspect domainОбобщённый backend-сервис.
databaseaspect 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_brokeraspect team, aspect domainПодтипы по семейству (kafka_cluster, redpanda, pulsar, rabbitmq, activemq, nats_server, mqtt_broker, redis_streams, nsq, …).
gatewayaspect team, aspect domainEdge-proxy / API-gateway / обратный прокси.
load_balanceraspect team, aspect domainБалансировка трафика L4/L7 по репликам. Близок к gateway.
service_meshaspect team, aspect domainПодтипы istio, linkerd, consul_connect, kuma, cilium.
service_discoveryaspect team, aspect domainРеестр сервисов / плоскость конфигурации. Подтипы consul, zookeeper, eureka, nacos.
feature_flagsaspect team, aspect domainПодтипы unleash, flagsmith, flipt, growthbook.
bpm_systemaspect team, aspect domainОркестратор workflow. Подтипы по движку (camunda, temporal, airflow, n8n, …).
identity_provideraspect team, aspect domainOIDC / SSO-провайдеры. Подтипы keycloak, zitadel, authentik, authelia, ory, dex, supertokens, casdoor, fusionauth.
secrets_manageraspect team, aspect domainХранилище секретов / ключей. Подтипы vault, openbao, infisical.
observabilityaspect team, aspect domainТелеметрия. Подтипы по сигналу: metrics_system, logging_system, tracing_system, dashboard, collector, alerting, apm (у каждого — подтипы по вендору).

Чтение таблиц:

  • Обязательные пустые слоты должны быть заполнены или сброшены каждым экземпляром.
  • Значения по умолчанию — это предзаданные поля, которые экземпляр наследует (с семантикой каскада там, где она указана).
  • Виджет по умолчанию — тег пользовательского элемента, которым отрисовывается экземпляр (каскадируется через cascade widget: ...).

Импорт нужных типов из arch.backend и arch.extras сразу даёт рабочие визуалы — собственный widgets: скрипт не требуется.

Стандартная библиотека определяет:

  • surface — обобщённый базовый тип, без значений по умолчанию, без обязательных пустых слотов.
  • rest_crudarch.backend) — связывает rest_list / rest_create / rest_read / rest_update / rest_delete как list / create / read / update / delete.

Пользовательские типы поверхностей (resource, capability, endpoint_group) обычно объявляются для каждого проекта. См. главу 6 и главу 16.

Типы интерфейсов на уровне протокола. Соглашение по оформлению рёбер: синхронные request/response — сплошная линия; асинхронные / стримовые / pub-sub — пунктирная.

ТипРодительСтильСемантика
httpinterfaceсплошнойБазовый HTTP.
http_get / http_post / http_put / http_patch / http_delete / http_head / http_optionshttpсплошнойПо одному на HTTP-метод.
webhookhttpпунктирИсходящий fire-and-forget колбэк.
ssehttpпунктирServer-sent events.
resthttpсплошнойHTTP с ресурсной семантикой.
rest_list / rest_create / rest_read / rest_update / rest_deleterestсплошнойПять REST-глаголов.
ТипРодительСтильСемантика
grpcinterfaceсплошнойБазовый gRPC.
grpc_unarygrpcсплошнойОдин запрос, один ответ.
grpc_server_stream / grpc_client_stream / grpc_bidi_streamgrpcпунктирСтримовые варианты.
ТипРодительСтильСемантика
graphqlinterfaceсплошнойБазовый GraphQL.
graphql_query / graphql_mutationgraphqlсплошнойСинхронные операции.
graphql_subscriptiongraphqlпунктирАсинхронный push-поток.
ТипРодительСтильСемантика
websocketinterfaceпунктирДвусторонний, долгоживущий.
ТипРодительСтильСемантика
kafkainterfaceпунктирТопики распределённого лога.
amqpinterfaceпунктирОткрытый AMQP wire-протокол.
natsinterfaceпунктирЛёгкий pub/sub по subjects.
mqttinterfaceпунктирIoT pub/sub по топикам.
redis_pubsubinterfaceпунктирКаналы Redis pub/sub.
ТипРодительСтильСемантика
db_readinterfaceсплошнойRead-доступ к database / cache.
db_writeinterfaceсплошнойWrite-доступ к database / cache.

Асинхронные/событийные интерфейсы (любые пунктирные) — это то, чем моделируются события: они достигаются обычным ребром процесса >, а не полем subscribes: (отдельной конструкции события или подписки нет).

Объявляйте собственные типы, когда предметный словарь предпочтительнее типов на уровне протокола. См. главу 16.

// In your project's types.arch
export 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.