Спецификация 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-фасадом нужно явно указать «источник истины» контракта и правила маппинга.
Не подходит или требует дополнения, если:
- контракт полностью описан OpenAPI/REST без SOAP-binding — используйте 10.01.04 Шаблон спецификации REST API;
- взаимодействие event-driven через Kafka/RabbitMQ без SOAP-транспорта — 10.01.06 Шаблон спецификации Producer (Kafka, RabbitMQ) / 10.01.07 Шаблон спецификации Consumer (Kafka, RabbitMQ);
- выбор SOAP vs REST, document/literal wrapped vs bare, политика версионирования — решение в 10.01.13 Шаблон архитектурного решения (ADR); в спеке — следствия для endpoint и namespace;
- latency, rate limits, аудит, MTOM — полный текст в 10.01.12 Шаблон нефункциональных требований (NFR); в спеке — ссылки и параметры, от которых зависит интеграция;
- нужен только обзор нотации SOAP/WSDL — см. 07.02 Принципы работы HTTP, REST, SOAP, 03.05.03 Спецификации контрактов (OpenAPI, AsyncAPI, Protobuf) и 07.03 Основы XML, JSON, YAML, а не этот шаблон.
Входные условия: границы сервиса и потребители согласованы (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 | Примечание |
|---|---|---|
portType | interface | Каталог операций — имя interface |
operation в portType | operation в interface | Имена операций |
message + part | element / type в interface | Input/output/fault messages |
fault в portType | fault в interface | Строка матрицы §3.8 |
binding + port | binding + endpoint | §3.4 endpoints |
types + XSD import | types + XSD import | §3.3 shared XSD |
| SOAP 1.1/1.2 binding | wsoap: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 по матрице.
| Среда | URL | Binding | Timeout |
|---|---|---|---|
| test | https://pay-test.corp.example/PaymentService | SOAP 1.2 HTTP | 30 s |
| prod | https://pay.corp.example/PaymentService | SOAP 1.2 HTTP + mTLS | 15 s |
Каталог операций (фрагмент):
| Operation ID | WSDL name | Паттерн | Описание | Trace | Идемпотентность |
|---|---|---|---|---|---|
OP-PAY-001 | VerifyPayment | sync request-response | Проверка реквизитов и лимитов | SRS-REQ-112, US-0312 | Да, по paymentRef; повтор → тот же resultCode |
OP-PAY-002 | GetPaymentStatus | sync request-response | Статус ранее отправленного платежа | SRS-REQ-115 | Да (read) |
OP-PAY-001 — VerifyPayment (фрагмент сообщений):
Request root: VerifyPaymentRequest (type tns:VerifyPaymentRequestType).
| Поле | XSD | Обяз. | Семантика |
|---|---|---|---|
paymentRef | string, max 36 | да | UUID платежа в системе-инициаторе; ключ идемпотентности |
amount | decimal | да | Сумма; scale=2; > 0 |
currency | string, pattern [A-Z]{3} | да | ISO 4217 |
payerAccount | string, 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 | Код | Когда | HTTP | Retry |
|---|---|---|---|---|---|
| Business | — | REJECTED + resultCodeDetail=LIMIT_EXCEEDED | Превышен лимит | 200 | нет |
| SOAP Fault | InvalidAccountFault | soap:Sender + subcode InvalidAccount | Неверный формат счёта | 500 | нет |
| SOAP Fault | DownstreamTimeoutFault | soap: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 |
Типичный порядок работы аналитика
- Выделить операции из SRS/UC/stories → черновой каталог с Operation ID и trace.
- Согласовать с архитектором WSDL: portType/interface, messages, binding, namespace, imports XSD.
- Детализировать сообщения: таблицы полей, бизнес-правила, примеры XML, fault-матрица с mapping WSDL fault → код; для one-way — §3.4.2.
- Зафиксировать транспорт (HTTP/JMS), callback при необходимости, security, NFR (timeout/retry) — параллельно с 10.01.12 Шаблон нефункциональных требований (NFR).
- Review с dev, интеграторами, security (08.04 Рецензирование и инспекции (техники Фейгена)); опубликовать WSDL/XSD в репозитории с tag.
- При изменении XSD — impact analysis на consumers (02.05.02 Управление изменениями (Change Control Board) при формальном процессе); для shared XSD — отдельное согласование владельца схемы.
6. Связи с другими разделами базы
Теория и контекст, не дублирующие §5:
- SOAP vs REST, операционная модель — 07.02 Принципы работы HTTP, REST, SOAP
- Сравнение с REST и gRPC (выбор стека) — 03.05.02 Синхронные протоколы (REST, gRPC, GraphQL)
- WSDL/XSD как контрактные спецификации — 03.05.03 Спецификации контрактов (OpenAPI, AsyncAPI, Protobuf)
- XML, XSD, структура сообщений — 07.03 Основы XML, JSON, YAML
- Диаграмма последовательности для ключевых вызовов — 03.02.03 Диаграмма последовательности (Sequence Diagram)
- Чеклист перед стартом разработки — 10.04 Чеклист аналитика перед стартом разработки
7. Источники и дополнительные материалы
URL в этом блоке взяты из отчёта исследования; перед публикацией имеет смысл перепроверить актуальность вручную (в т.ч. статус WS-I и зеркала OASIS).
Книги и стандарты
- W3C — SOAP 1.1 (Note) — https://www.w3.org/TR/soap/
- W3C — SOAP Version 1.2 Part 1: Messaging Framework (Recommendation) — https://www.w3.org/TR/soap12-part1/
- W3C — SOAP Version 1.2 Part 2: Adjuncts (Recommendation) — https://www.w3.org/TR/soap12-part2/
- W3C — Web Services Description Language (WSDL) 1.1 (Note) — https://www.w3.org/TR/wsdl11
- W3C — Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language (Recommendation) — https://www.w3.org/TR/wsdl20/
- W3C — XML Schema Part 0: Primer — https://www.w3.org/TR/xmlschema-0/
- W3C — Web Services Addressing 1.0 - Core (Recommendation) — https://www.w3.org/TR/ws-addr-core/
- W3C — Web Services Addressing 1.0 - SOAP Binding (Recommendation) — https://www.w3.org/TR/ws-addr-soap/
- W3C — Web Services Policy 1.5 - Framework (Recommendation) — https://www.w3.org/TR/ws-policy/
- OASIS — Web Services Security: SOAP Message Security 1.1 (Standard) — https://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-errata-SOAPMessageSecurity.pdf
- WS-I — Basic Profile 1.1 (interop для SOAP/WSDL) — https://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html
Статьи и практики
- Microsoft — Working with WSDL (WCF documentation) — https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/working-with-wsdl
- Microsoft — Using the XmlSerializer (document/literal, сериализация сообщений) — https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-the-xml-serializer