Released APIs и OData: контракты финансовых сервисов#
В SAP слово API может обозначать тип ABAP-объекта, разрешение на его использование или опубликованный сетевой сервис. Это разные контракты. Для финансового обмена важно знать, кто вправе вызывать объект, каким способом, с какой семантикой данных и какое изменение совместимо с уже работающим потребителем.
Не смешивайте release state и release contract#
Статус Released, Deprecated или Decommissioned сообщает состояние жизненного цикла объекта. Release contract задаёт цель разрешённого использования и требования стабильности. В документации ABAP Cloud перечислены, среди прочего, C0 для расширения, C1 для внутреннего использования в разработке и C2 для удалённого API; назначение и доступность зависят от типа объекта, языка ABAP и продуктового контекста. Не выводите пригодность внешнего потребителя из одного слова Released.
Для каждого используемого SAP-объекта проверьте в целевой системе:
- существует ли он в установленном выпуске и компоненте;
- какой у него API state, release contract и видимость;
- разрешён ли контракту именно ваш способ вызова: ABAP-код, расширение или удалённый клиент;
- проходят ли проверки ATC и актуальные правила совместимости;
- какой преемник и план обновления указаны для устаревающего объекта.
Классификация release относится к объекту в определённом software component и пакете. Она не доказывает, что такой же объект доступен во всех редакциях S/4HANA или во всех релизах. Проверьте опубликованный API в каталоге и системе проекта, а не только по совпадению имени в статье или примере.
Слои RAP-сервиса и OData#
В RAP разделены бизнес-модель и протокол публикации. CDS-модель задаёт данные и связи; service definition выбирает, что входит в бизнес-сервис; service binding связывает это определение с протоколом и способом предоставления, например OData V2 или V4 и UI-service либо Web API. Одна service definition может участвовать в разных bindings. Поэтому UI-представление не следует автоматически считать стабильным внешним API для интеграционного клиента.
В редакторе binding сервис активируют и публикуют для текущей ABAP-системы. Такая локальная публикация сама по себе не создаёт доступ из другого ландшафта и не настраивает маршрутизацию, TLS, доверие, аутентификацию, роли или сетевой доступ. Внешний потребитель требует отдельной конфигурации транспортного и защитного контура.
Для OData фиксируйте в контракте:
- публичные entity sets, ключи, associations и доступные операции;
- типы сумм и валют, количеств и единиц, даты и часовые пояса;
- фильтрацию, сортировку, пагинацию и ожидаемый объём ответа;
- кто видит и меняет каждую финансовую запись;
- форму бизнес-ошибок и условия повторного запроса;
- поведение конкурентных обновлений и правила идемпотентности команд.
Не полагайтесь на случайные поля внутренней CDS-модели как на внешний контракт. Устойчивый сервис открывает только нужную бизнес-поверхность и сохраняет понятный смысл её ключей и показателей.
Версия и совместимость#
Сервисная версия должна позволять старому клиенту продолжить работу, пока потребитель отдельно не согласовал переход. SAP описывает версионирование в service binding через service definitions и сервисные версии; детали именования, API state и семантической версии зависят от типа binding и релиза. Перед добавлением или удалением версии проверьте, как её адресуют клиенты и что происходит с прежней.
Изменение может быть формально допустимым для технического инструмента, но несовместимым по бизнес-смыслу. Смена валютной основы суммы, уровня детализации, ключа, фильтра по компании, правил сторно или трактовки пустого значения способна изменить отчёт, даже если JSON-схема осталась той же. Сохраняйте контрольные примеры и проверяйте старую и новую версию на одном наборе входов.
Доступ, конкуренция и повторная доставка#
Авторизация проверяется в фактическом пути потребления: роль приложения, DCL и полномочия бизнес-объекта должны ограничивать именно тот набор данных, который получает клиент. Для изменяющих запросов определите правила повторов после тайм-аута, чтобы повторная команда не создала второй финансовый эффект. Не всякая операция безопасна к повтору; идемпотентный ключ или бизнес-проверка должны быть частью явно выбранного контракта.
RAP ETag обеспечивает optimistic concurrency: клиент присылает версию прочитанного экземпляра, а система принимает изменение только при совпадении с актуальным состоянием. Это помогает обнаружить конкурирующее изменение, но не задаёт бизнес-правила повтора, дедупликации или сверки. Проверяйте ETag на чтении и записи, включая устаревший клиентский токен, а draft-сценарий оценивайте отдельно.
Проверка финансового сервиса#
Для каждого потребителя ведите матрицу «версия - операция - роль - ожидаемый результат». Минимальный набор включает чтение разрешённой и запрещённой компании, фильтр и пагинацию, валюту с разной точностью, граничный финансовый период, повтор одинаковой команды, тайм-аут после отправки и два конкурентных изменения одного объекта. Сверяйте не только HTTP-код, но и идентификатор документа, строки, суммы, валюты, статус проводки и контрольные итоги.
Записывайте систему, редакцию и выпуск, binding type, service definition, версию, пользователя или роль, параметры запроса, тестовые данные и точные ожидаемый и фактический результаты. Успешная проверка metadata подтверждает описание сервиса, но не полномочия, корректность финансового расчёта или поведение интеграции под нагрузкой.
Область источников и проверки#
- Released APIs, ABAP Keyword Documentation
- Release states and contracts, SAP ADT User Guide
- Service Binding, ABAP Platform 2025 FPS01
- Service Definition, ABAP RESTful Application Programming Model
- RAP ETag, ABAP Keyword Documentation
Документация по контрактам API и service definition относится к ABAP Cloud / ABAP Cross-Product; описание Service Binding ограничено ABAP Platform 2025 FPS01. Перед применением перепроверьте функции и типы binding в целевой редакции и выпуске. Записи источников имеют статус metadata_only, сохранённые снимки отсутствуют. Сервис, роли, клиентский контракт, финансовые операции и SAP runtime в этом проекте не запускались.