Спецификация SOAP API — артефакт системного аналитика, который фиксирует контракт веб-сервиса: бизнес-назначение операций, технический контракт (WSDL/XSD), транспорт, безопасность, ошибки и трассировку к SRS/BRD. В отличие от REST (10.01.04 Шаблон спецификации REST API), центр тяжести — операции и типизированные сообщения (конверт SOAP — envelope, заголовки — headers, тело — body), а не ресурсы и HTTP-глаголы. Документ дополняет или ссылается на машиночитаемый WSDL, но не заменяет его: вы добавляете семантику полей, бизнес-правила, NFR и сценарии, которых в WSDL нет. Теория протокола — в 07.02 Принципы работы HTTP, REST, SOAP.

Шаблон ориентирован на WSDL 1.1 (типичный legacy/enterprise-контур). WSDL 2.0 и смешанные контуры допустимы — явно укажите версию в §3.3 и заполняйте поля по таблице соответствия 1.1 ↔ 2.0; детали нотации — 03.05.03 Спецификации контрактов (OpenAPI, AsyncAPI, Protobuf).

1. Назначение

Спецификацию SOAP API пишет системный аналитик (или аналитик с поддержкой интеграционного архитектора); её читают разработка backend, интеграторы, QA, security и команды потребителей (внутренние и внешние).

Шаблон закрывает четыре задачи:

  • Контракт операций — каталог операций (operation) с input/output/fault-сообщениями, binding (document/literal, SOAP 1.1/1.2) и endpoint/destination по средам; одна спека = один веб-сервис или логический порт.
  • Семантика сообщений — описание полей XSD сверх типов: бизнес-смысл, обязательность, правила валидации «между полями», примеры XML; без этого codegen и интеграции расходятся в интерпретации.
  • Мост к требованиям — трассировка Operation ID → SRS/BRD → user story/use case → тест-кейсы; WSDL сам по себе не передаёт «зачем» операция.
  • Управление контрактом (governance) — правило приоритета при расхождении WSDL и текста, политика версионирования, deprecated-операции, retry/fault-поведение для эксплуатации.

WSDL/XSD — machine-readable API spec; markdown/PDF по этому шаблону — contract + semantics + governance. Правило приоритета фиксируется в §3.1.

2. Когда использовать

Подходит, если:

  • интегрируете legacy-систему, ESB, банковский/государственный контур, где контракт задан WSDL/XSD;
  • проектируете новый SOAP-сервис или меняете существующий (новые операции, breaking change в XSD);
  • потребителю нужен человекочитаемый контракт с бизнес-описанием, fault-матрицей и NFR — WSDL недостаточен;
  • сервис вызывается синхронно (request-response), one-way или async callback через SOAP over HTTP и/или JMS;
  • параллельно с REST-фасадом нужно явно указать «источник истины» контракта и правила маппинга.

Не подходит или требует дополнения, если:

Входные условия: границы сервиса и потребители согласованы (03.01.04 Интерфейсы и интеграционные взаимодействия), функциональные требования описаны в SRS/stories/UC, термины домена унифицированы (10.01.14 Шаблон глоссария и словаря данных).

Серия с REST: структура §3 сознательно зеркалит 10.01.04 Шаблон спецификации REST API (метаданные, назначение, NFR по ссылке, трассировка, workflow). Отличия SOAP-шаблона — операции и WSDL/XSD, JMS-транспорт, async callback, fault-матрица и политика HTTP 200 + business error в body.

3. Структура документа

Скопируйте блок в Confluence, Git (markdown + WSDL/XSD в репозитории) или RM-инструмент. Поля с пометкой обяз. нужны для sign-off; остальные — по контексту. Полные XSD выносите в приложение; в теле — таблицы ключевых полей.

Минимальный контур — для внутреннего сервиса с ≤3 операциями, только HTTP, без JMS и callback достаточно §3.1, 3.2, 3.5, 3.6, 3.8, 3.9, 3.12; остальные подразделы пометьте «N/A». Полный контур — enterprise, JMS, callback, shared XSD, MTOM.

Контрактные проверки до кода — см. 02.04.01 Верификация и валидация (V&V) и 08.03 Тестирование требований (статическое тестирование).

3.1. Метаданные

ПолеОбяз.Что писать
IDдаУникальный идентификатор, напр. SOAP-PAY-v3. Схема ID — 10.01.15 Шаблон матрицы трассировки.
Имя сервиса / WSDL service nameдаИмя в WSDL, target namespace, версия API (v1, v2).
Владелец, командадаService owner, контакт для изменений контракта.
Версия документа, статус, датадаDraft → Review → Approved; автор последнего изменения.
Ссылка на WSDL/XSDдаРепозиторий, tag/commit, путь к файлам; не дублировать XSD в Word без синхронизации.
Upstream: BRD / SRS / ADRдаSRS-REQ-xxx, ADR-018 (выбор SOAP, binding, versioning).
Правило приоритетадаПри расхождении WSDL vs текст: что главное (техника vs семантика). Пример: «WSDL v3.2.1 — источник истины для типов и binding; семантика полей и бизнес-коды — в данном документе».
Связанные спекидаREST-фасад, БД (10.01.03 Шаблон спецификации БД сервиса), Producer/Consumer, NFR — ссылки или явное «N/A» / «нет» по каждому пункту, если артефакт не применим. Не оставляйте поле пустым.

3.2. Назначение сервиса

ПолеОбяз.Что писать
Домен и бизнес-контекстдаЗачем сервис существует, какие процессы поддерживает.
ПотребителидаСистемы, роли, внутренние/внешние; SLA-критичность.
Модель взаимодействиядаSync request-response / one-way / async callback; кто инициатор. Для callback — §3.4.1; для one-way без callback — §3.4.2 (ack, poll или отдельная операция).
Scope / excludedдаКакие операции входят; что сознательно не покрывается этим сервисом.

3.3. Обзор контракта

ПолеОбяз.Что писать
Target namespaceдаURI namespace из WSDL/XSD.
Версия WSDLда1.1 (основа шаблона) или 2.0; при 2.0 — заполняйте поля §3.5–3.6 по таблице соответствия ниже.
Версия SOAPда1.1 vs 1.2 — влияет на fault-формат (§3.8) и namespace envelope.
Стиль bindingдаdocument/literal wrapped vs bare vs rpc/literal; WS-I Basic Profile 1.1 — если заявлена совместимость.
Внешние XSD (import/include)даСписок импортов: URI/путь, версия, владелец; shared types между сервисами.
Governance shared XSDда**Если есть import общих схем (common-types и т.п.): кто владеет релизом XSD; breaking change в shared-схеме vs bump версии сервиса/endpoint; как уведомляются все потребители схемы (рассылка, changelog, pin commit). Отдельно от версии API сервиса.
Политика обратной совместимостидаAdditive (новые optional-поля) vs breaking (смена namespace/endpoint/удаление полей).
Deprecated operationsнетОперации на sunset, migration window, parallel v2 endpoint; см. 03.05.07 Управление версионированием API и жизненным циклом.
Уведомление потребителейнетКак consumer узнаёт о deprecation/breaking change (рассылка, changelog, WSDL version bump).
Параллельный RESTнетЕсли есть REST-фасад — ID спеки (10.01.04 Шаблон спецификации REST API), источник истины, правила маппинга полей; согласовать HTTP-семантику (коды, business error в body vs HTTP error) с REST-спекой, не только маппинг полей.

Соответствие полей WSDL 1.1 ↔ 2.0 (§3.5–3.6 и fault-матрица):

WSDL 1.1 (шаблон)WSDL 2.0Примечание
portTypeinterfaceКаталог операций — имя interface
operation в portTypeoperation в interfaceИмена операций
message + partelement / type в interfaceInput/output/fault messages
fault в portTypefault в interfaceСтрока матрицы §3.8
binding + portbinding + endpoint§3.4 endpoints
types + XSD importtypes + XSD import§3.3 shared XSD
SOAP 1.1/1.2 bindingwsoap:binding (WSDL 2.0)Указать в §3.3 «Стиль binding»

3.4. Среды, endpoints и транспорт

Заполните подразделы по фактическим binding из WSDL: HTTP, JMS или оба. Пустые подразделы пометьте «не используется».

ПолеОбяз.Что писать
Транспорт(ы)даHTTP, JMS или оба — что реально используется в prod.
Политика HTTP-кодовда**Если SOAP over HTTP: правило для всего сервиса — напр. «HTTP 200, если envelope разобран; SOAP Fault и business-коды в body; HTTP 500/503 только при transport/infra сбое». Согласовать с §3.8 и QA.
HTTP: таблица средда**Если HTTP: среда, URL endpoint, port name, binding, mTLS, таймаут по умолчанию.
WSDL locationдаURL ?wsdl или путь к файлу по среде (для HTTP и/или как артефакт для JMS-потребителей).
JMS: таблица средда**Если JMS: среда, destination (queue/topic), connection factory, JMS correlation ID / SOAP header для корреляции, selector, DLQ, persistence mode.
Charset / encodingдаUTF-8 по умолчанию; исключения для legacy.
MTOM / вложениянетЕсли бинарные данные — включено ли MTOM, лимит размера; без MTOM лимит request/response — в §3.5 «Лимит размера сообщения».

3.4.1. Async callback (если модель из §3.2 включает callback)

Обязательно, если provider отвечает асинхронным вызовом на endpoint consumer.

ПолеОбяз.Что писать
Callback endpoint / destinationдаURL (HTTP) или JMS destination у consumer, куда provider шлёт ответ.
Callback WSDL / operationдаИмя операции ответа, portType/interface, ссылка на WSDL consumer-side или фрагмент в приложении.
WS-AddressingдаAction request и callback; RelatesTo = MessageID исходного запроса; кто генерирует MessageID.
SLA callbackдаМакс. время до callback; поведение при просрочке (poll-операция, fault, retry).
Идемпотентность callbackдаПовторная доставка того же callback → тот же ack / duplicate error / ignored; ключ dedup.
One-way request + callbackда**Если request one-way: как consumer передаёт callback address (header, поле body, preregistration).

3.4.2. One-way без callback (fire-and-forget)

Обязательно, если в §3.2 указан one-way без §3.4.1.

ПолеОбяз.Что писать
Подтверждение приёмадаОдин из вариантов: none (HTTP 202/200 без body, ack не требуется); transport ack (JMS auto-ack / HTTP 202); отдельная операция Ack (имя, correlation id); статус через poll (имя операции GetStatus, SLA).
Sync response в WSDLдаЕсть ли output message в WSDL: «нет output — fire-and-forget» или «пустой AckResponse». Зафиксировать в §3.6 для каждой one-way операции.
Паттерн вызова в §3.5даЯвно: one-way / ack:none, one-way / ack:transport, one-way / poll:GetStatus и т.д.
Ошибки one-wayдаFault только на transport/validation или также async notification; как consumer узнаёт об ошибке обработки.

3.5. Каталог операций

Сводная таблица + детализация на каждую операцию (отдельный подраздел 3.6).

ПолеОбяз.Что писать
Operation IDдаСквозной ID, напр. OP-PAY-001; связь с тестами и интеграционными сценариями — 02.03.04 Трассировка требований (концепция).
WSDL operation nameдаИмя в portType (WSDL 1.1) или interface (WSDL 2.0); message part names для input/output/fault.
Бизнес-описаниедаЧто делает операция, для кого, триггер/инициатор.
Trace to requirementдаSRS-REQ-xxx, US-0247, UC-012.
Паттерн вызовадаSync request-response / one-way (см. §3.4.2: ack none/transport/poll/Ack-op) / async callback (§3.4.1).
Статус операциинетActive / Deprecated (sunset date) / Removed (planned).
ИдемпотентностьдаДа / нет / N/A (one-way без бизнес-ответа); ключ (business id, message id); повтор с тем же ключом → тот же результат / duplicate error / ignored. Связь с бизнес-правилами §3.6.
Ожидаемое время ответанетp95 или SLA; для callback — SLA до callback (§3.4.1); для one-way ack:none — «N/A».
Лимит размера сообщениянетМакс. размер request/response в KB/MB; без MTOM — жёсткий лимит; с MTOM — см. §3.4.
Пагинация / bulkнетДля list-операций: page token/cursor, max batch size; при отсутствии — «не поддерживается».

3.6. Сообщения (на операцию)

Для каждой операции из каталога — отдельный блок.

ПолеОбяз.Что писать
Request: корневой элементдаИмя элемента, ссылка на XSD type/element (в т.ч. из import).
Request: таблица полейдаИмя, XSD-тип, обязательность, семантика, ограничения (pattern, length, enum), пример.
Response: корневой элементдаАналогично request. One-way без sync response: «N/A — fire-and-forget, ack:none (§3.4.2)» или «пустой AckResponse»; one-way + callback: «нет sync response, результат в callback §3.4.1»; one-way + poll: «нет sync response, статус — операция GetStatus».
Response: таблица полейда**Не обязательна, если Response = N/A (fire-and-forget). Иначе — включая коды бизнес-результата в body (не путать с SOAP Fault).
Бизнес-правила валидациидаПравила сверх XSD: cross-field, условная обязательность, справочники; правила duplicate/replay для идемпотентности.
Примеры XMLдаМинимальный request; response и SOAP Fault — если применимы (не для pure fire-and-forget без body); без персональных данных.
Fault messages (из WSDL)даКакие fault-ветки объявлены в portType/interface; имя WSDL fault → строка в матрице §3.8 (faultcode/subcode для SOAP 1.2 или faultcode QName для SOAP 1.1).

3.7. SOAP Headers

ПолеОбяз.Что писать
Стандартные заголовкинетWS-Addressing: MessageID, RelatesTo, Action, ReplyTo/To — кто заполняет; для callback — §3.4.1.
Security headersнетWS-Security: UsernameToken, Timestamp, Signature — ссылка на §3.9 и 03.05.05 Безопасность API.
Custom headersнетКорреляция (business id, trace id), tenant id; namespace и обязательность.
MustUnderstandнетКакие headers с флагом mustUnderstand=1.

3.8. Ошибки и faults

Разделяйте SOAP Fault (транспорт/контрактный сбой) и бизнес-ошибку в body (прикладной код в response). Формат Fault зависит от версии SOAP из §3.3: SOAP 1.2 — Code/Subcode; SOAP 1.1 — faultcode (QName), faultstring, detail (без subcode).

ПолеОбяз.Что писать
Матрица ошибокдаТип (Fault vs business), WSDL fault name (если есть), код, текст для пользователя/логов, HTTP-код транспорта (если HTTP, по §3.4), retry (да/нет/backoff).
SOAP FaultдаSOAP 1.2: faultcode, subcode, detail element; SOAP 1.1: faultcode QName, faultstring, detail; когда возникает. Каждая строка ↔ fault из WSDL §3.6.
Прикладные кодыдаКоды в response body: ERR_PAY_001, семантика, рекомендуемое действие потребителя.
Политика HTTP statusда**Если HTTP: одна строка-сводка (дублирует §3.4 для QA) — напр. «business REJECTED → HTTP 200 + body; InvalidAccount → SOAP Fault + HTTP 500».
Известные отклонениянетLegacy: фактическое поведение ≠ WSDL — явный список для поддержки.

3.9. Безопасность

ПолеОбяз.Что писать
АутентификациядаBasic, client cert/mTLS, WS-Security UsernameToken и т.д.; что в prod vs test.
АвторизациядаРоли и операции — связь с 10.01.11 Шаблон ролевой модели; матрица role × operation.
Маскирование ПДндаКакие поля не логировать; ссылка на NFR/security.
WS- политики*нетWS-Security, WS-Policy — если применимо; не «как в WSDL» без расшифровки для prod; детали — 08.07 Основы кибербезопасности для системного аналитика.

3.10. Нефункциональные требования

ПолеОбяз.Что писать
ТаймаутыдаConnect/read timeout по умолчанию; для JMS — receive timeout; рекомендации потребителю.
Retry / backoffдаДля каких fault/HTTP-кодов retry допустим; max attempts, jitter; идempotency при retry.
Rate limitsнетЛимиты вызовов; ссылка на 03.06.03 Rate Limiting — управление пропускной способностью.
АудитнетЧто логируется на стороне provider/consumer; correlation id.
NFR IDдаСсылки на 10.01.12 Шаблон нефункциональных требований (NFR); не дублировать полный NFR-документ.

3.11. Зависимости

ПолеОбяз.Что писать
Downstream SOAP/RESTнетКакие операции вызывает сервис внутри; timeout cascade.
БДнетСсылка на 10.01.03 Шаблон спецификации БД сервиса; mapping полей сообщения ↔ persistence.
Очереди / шинанетЕсли SOAP — транспорт к ESB: корреляция с 10.01.06 Шаблон спецификации Producer (Kafka, RabbitMQ) / 10.01.07 Шаблон спецификации Consumer (Kafka, RabbitMQ).

3.12. Тестирование и приёмка

ПолеОбяз.Что писать
Критерии приёмкидаВалидность по XSD, negative cases, контрактные тесты (SoapUI, ReadyAPI и т.п.); формулировки — 02.04.02 Критерии приёмки (Acceptance Criteria).
Тестовые данныедаСсылка на наборы; учётные записи test/prod.
Контрактные тестынетCI-job, сравнение с эталонным WSDL; WS-I Basic Profile — если заявлен в §3.3 (опциональный критерий).
Минимум для sign-offдаЯвно: минимум — ручной прогон SoapUI/ReadyAPI по каждой операции (happy + fault из §3.8); рекомендуется — CI-контрактные тесты при частых изменениях WSDL. Без CI sign-off допустим, если зафиксирован ручной чеклист и TC-ID.
Трассировка к тест-кейсамдаOperation ID → TC-ID.

3.13. Открытые вопросы, допущения, история

ПолеОбяз.Что писать
Assumptionsнет«Потребитель кэширует справочник валют не чаще раза в сутки».
Открытые вопросынетНерешённое до Approved (напр. «нужен ли отдельный fault для timeout downstream»).
История измененийдаВерсия, дата, автор, impact на WSDL/consumers.

3.14. Приложения

ПолеОбяз.Что писать
Полный WSDL/XSDнетФайлы или ссылка на репозиторий — предпочтительно; imported XSD включить или указать pin-версии.
Диаграмма последовательностинетДля 1–3 ключевых операций (в т.ч. callback) — 03.02.03 Диаграмма последовательности (Sequence Diagram); не дублировать 10.01.08 Шаблон сквозной фичи (BPMN-процесс) целиком.

3.15. Чеклист качества перед sign-off

Рецензия спеки — 08.04 Рецензирование и инспекции (техники Фейгана).

  • У каждой операции есть Operation ID, trace к SRS/story и описание в WSDL.
  • Описаны input, output и fault-ветки; не только happy path; для one-way без response — явно N/A + §3.4.2.
  • Каждый WSDL fault из §3.6 имеет строку в матрице §3.8 с корректным форматом SOAP 1.1 или 1.2.
  • SOAP Fault и бизнес-ошибки в body разведены по разным строкам матрицы.
  • Политика HTTP-кодов (§3.4, §3.8) согласована с QA и REST-фасадом (если есть); business-ответы не путают с transport fault.
  • Указаны версия SOAP, WSDL, binding, charset; endpoints (HTTP) и/или JMS destinations по всем средам.
  • Для async callback заполнен §3.4.1; для one-way без callback — §3.4.2.
  • Идемпотентность: ключ и семантика повтора (duplicate vs same result) заданы для каждой операции, где применимо.
  • Внешние XSD import/include перечислены; governance shared XSD (§3.3) согласован с владельцами.
  • При WSDL 2.0 поля §3.5–3.6 заполнены по таблице соответствия §3.3.
  • Deprecated operations и migration window отражены в §3.3/§3.5, если есть sunset.
  • Семантика полей заполнена — не только xs:string.
  • Правило версионирования и breaking change согласованы с ADR.
  • Security для prod описана явно, не отсылкой «как в WSDL».
  • Таймауты и retry задокументированы для sync-, callback- и one-way-вызовов.
  • MTOM и лимиты размера сообщения согласованы между §3.4 и §3.5.
  • Корреляция (message id, business id, JMS correlation) согласована с Consumer/Producer при шинной интеграции.
  • WSDL/XSD в репозитории совпадает с утверждённой версией документа.
  • Минимум sign-off §3.12 выполнен (ручной SoapUI или CI — как зафиксировано).
  • Трассировка к 10.01.15 Шаблон матрицы трассировки и тест-кейсам заполнена.

4. Пример заполнения

Сокращённый фрагмент для сервиса PaymentVerificationService (корпоративный шлюз, данные условны).

Метаданные: SOAP-PAY-v3 · PaymentVerificationService · namespace http://corp.example/payment/v3 · Approved · v3.2, 2026-03-10 · WSDL: git@repo/payment-wsdl@v3.2.1 (WSDL 1.1) · Upstream: SRS-REQ-112, ADR-018 (SOAP 1.2, document/literal wrapped) · NFR: NFR-INT-004, NFR-SEC-002 · REST-фасад: API-PAY-REST-v1 (10.01.04 Шаблон спецификации REST API; read-only статус; источник истины — SOAP для write-операций; HTTP-коды business error согласованы) · БД: N/A · Producer/Consumer: N/A · Приоритет: WSDL — типы/binding; документ — семантика и business-коды.

Назначение. Синхронная проверка платёжного поручения перед проведением в АБС. Потребители: order-service, treasury-portal. Sync request-response, SLA-critical. Async callback не используется (§3.4.1 — N/A). One-way не используется (§3.4.2 — N/A).

Обзор контракта. WSDL 1.1, SOAP 1.2, document/literal wrapped, WS-I Basic Profile 1.1. Imported XSD: common-types-v2.xsd (commit abc123, owner platform-team). Governance shared XSD: breaking change в common-types — отдельный релиз с рассылкой всем сервисам-import; bump endpoint сервиса — только для breaking в namespace сервиса. Обратная совместимость: additive — новые optional-элементы в v3; breaking — новый endpoint /payment/v4. Deprecated: LegacyVerify — sunset 2026-12-01, миграция на VerifyPayment.

Транспорт и endpoints. Только HTTP. Политика HTTP: HTTP 200, если envelope валиден; business REJECTED — в body; SOAP Fault — HTTP 500/503 по матрице.

СредаURLBindingTimeout
testhttps://pay-test.corp.example/PaymentServiceSOAP 1.2 HTTP30 s
prodhttps://pay.corp.example/PaymentServiceSOAP 1.2 HTTP + mTLS15 s

Каталог операций (фрагмент):

Operation IDWSDL nameПаттернОписаниеTraceИдемпотентность
OP-PAY-001VerifyPaymentsync request-responseПроверка реквизитов и лимитовSRS-REQ-112, US-0312Да, по paymentRef; повтор → тот же resultCode
OP-PAY-002GetPaymentStatussync request-responseСтатус ранее отправленного платежаSRS-REQ-115Да (read)

OP-PAY-001 — VerifyPayment (фрагмент сообщений):

Request root: VerifyPaymentRequest (type tns:VerifyPaymentRequestType).

ПолеXSDОбяз.Семантика
paymentRefstring, max 36даUUID платежа в системе-инициаторе; ключ идемпотентности
amountdecimalдаСумма; scale=2; > 0
currencystring, pattern [A-Z]{3}даISO 4217
payerAccountstring, len 20даРасчётный счёт плательщика

Response root: VerifyPaymentResponse. Поле resultCode: OK | REJECTED | PENDING_REVIEW — бизнес-результат, не SOAP Fault.

WSDL fault InvalidAccountFault → матрица: soap:Sender + subcode InvalidAccount.

Минимальный request:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
               xmlns:tns="http://corp.example/payment/v3">
  <soap:Body>
    <tns:VerifyPaymentRequest>
      <tns:paymentRef>a1b2c3d4-e5f6-7890-abcd-ef1234567890</tns:paymentRef>
      <tns:amount>15000.00</tns:amount>
      <tns:currency>RUB</tns:currency>
      <tns:payerAccount>40702810123456789012</tns:payerAccount>
    </tns:VerifyPaymentRequest>
  </soap:Body>
</soap:Envelope>

Response с business-кодом (HTTP 200):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
               xmlns:tns="http://corp.example/payment/v3">
  <soap:Body>
    <tns:VerifyPaymentResponse>
      <tns:resultCode>REJECTED</tns:resultCode>
      <tns:resultCodeDetail>LIMIT_EXCEEDED</tns:resultCodeDetail>
      <tns:paymentRef>a1b2c3d4-e5f6-7890-abcd-ef1234567890</tns:paymentRef>
    </tns:VerifyPaymentResponse>
  </soap:Body>
</soap:Envelope>

SOAP Fault (SOAP 1.2, HTTP 500) — InvalidAccountFault:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Sender</soap:Value>
        <soap:Subcode>
          <soap:Value>tns:InvalidAccount</soap:Value>
        </soap:Subcode>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="ru">Неверный формат расчётного счёта</soap:Text>
      </soap:Reason>
      <soap:Detail>
        <tns:InvalidAccountDetail xmlns:tns="http://corp.example/payment/v3">
          <tns:field>payerAccount</tns:field>
        </tns:InvalidAccountDetail>
      </soap:Detail>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Для SOAP 1.1 тот же fault выглядел бы иначе: faultcode (QName, напр. soap:Client), faultstring, detail — без Subcode; формат задаётся в §3.3.

Ошибки (фрагмент матрицы):

ТипWSDL faultКодКогдаHTTPRetry
Business—REJECTED + resultCodeDetail=LIMIT_EXCEEDEDПревышен лимит200нет
SOAP FaultInvalidAccountFaultsoap:Sender + subcode InvalidAccountНеверный формат счёта500нет
SOAP FaultDownstreamTimeoutFaultsoap:Receiver + subcode DownstreamTimeoutАБС не ответила503да, max 3, exp backoff

Headers. WS-Addressing: MessageID (UUID v4) — генерирует consumer; RelatesTo — только в callback-сценариях (§3.4.1 N/A).

Безопасность. Prod: mTLS + WS-Security UsernameToken в header; роль PAYMENT_INITIATOR для VerifyPayment (10.01.11 Шаблон ролевой модели). Поле payerAccount — маскировать в логах (407028******9012).

NFR. Read timeout 15 s prod; retry только на DownstreamTimeout и HTTP 503 (10.01.12 Шаблон нефункциональных требований (NFR) NFR-INT-004).

Sign-off. Минимум: ручной SoapUI — TC-PAY-001..005 по операции VerifyPayment (OK, REJECTED, InvalidAccount, timeout). CI — не блокирует sign-off v3.2.

Трассировка: US-0312 → OP-PAY-001 → TC-PAY-001..005 → WSDL tag v3.2.1.

5. Связанные артефакты

Структура намеренно параллельна 10.01.04 Шаблон спецификации REST API; ниже — входы/выходы именно SOAP-спеки.

На входе (upstream)

АртефактСвязь
Vision & Scope, BRD, SRSЧто должен делать сервис — цели, KPI, функциональные требования — 04.01 Форматы документов (Vision&Scope, BRD, SRS, FRD)
10.01.01 Шаблон User Story / 10.01.02 Шаблон Use CaseСценарии, инициаторы, postconditions — основа для Operation ID и trace
10.01.14 Шаблон глоссария и словаря данныхКанонические имена полей сообщений
10.01.13 Шаблон архитектурного решения (ADR)Выбор SOAP vs REST, binding, versioning, ESB
10.01.11 Шаблон ролевой моделиМатрица role × operation
WSDL/XSD (черновик от архитектора)Технический каркас контракта

На выходе (downstream)

АртефактКогда создавать
10.01.03 Шаблон спецификации БД сервисаMapping полей SOAP ↔ persistence
10.01.06 Шаблон спецификации Producer (Kafka, RabbitMQ) / 10.01.07 Шаблон спецификации Consumer (Kafka, RabbitMQ)События после операций, корреляция id
10.01.12 Шаблон нефункциональных требований (NFR)SLA, retry, audit — по ссылке из спеки
10.01.04 Шаблон спецификации REST APIПараллельный фасад — правила маппинга и HTTP-семантика
Контрактные тесты / SoapUI-проектРеализация критериев приёмки
10.01.15 Шаблон матрицы трассировкиREQ/story → Operation ID → WSDL version → test

Типичный порядок работы аналитика

  1. Выделить операции из SRS/UC/stories → черновой каталог с Operation ID и trace.
  2. Согласовать с архитектором WSDL: portType/interface, messages, binding, namespace, imports XSD.
  3. Детализировать сообщения: таблицы полей, бизнес-правила, примеры XML, fault-матрица с mapping WSDL fault → код; для one-way — §3.4.2.
  4. Зафиксировать транспорт (HTTP/JMS), callback при необходимости, security, NFR (timeout/retry) — параллельно с 10.01.12 Шаблон нефункциональных требований (NFR).
  5. Review с dev, интеграторами, security (08.04 Рецензирование и инспекции (техники Фейгена)); опубликовать WSDL/XSD в репозитории с tag.
  6. При изменении XSD — impact analysis на consumers (02.05.02 Управление изменениями (Change Control Board) при формальном процессе); для shared XSD — отдельное согласование владельца схемы.

6. Связи с другими разделами базы

Теория и контекст, не дублирующие §5:

7. Источники и дополнительные материалы

URL в этом блоке взяты из отчёта исследования; перед публикацией имеет смысл перепроверить актуальность вручную (в т.ч. статус WS-I и зеркала OASIS).

Книги и стандарты

Статьи и практики