API и интеграции

Интеграция парковки со СКУД и АПС

Сначала фиксируются владельцы данных и границы команд, затем endpoints: это снижает риск расхождений между СКУД, АПС и парковочной платформой.

Инженерный материал5 минутПроверено 01.09.2026

Коротко

На объекте редко существует одна система. СКУД знает сотрудника и его права, АПС управляет стойкой и шлагбаумом, камеры видят места, 1С хранит договоры, а BI ждёт отчёты. Фраза «всё интегрируется по API» не решает главный вопрос: кто владеет каждым фактом и что произойдёт, когда сообщение придёт дважды или не придёт вовремя.

Сначала нарисуйте системы, а не endpoints

Типичный контур:

Система Возможный источник истины
СКУД/IdP человек, карта, роль доступа
CRM/1С/tenant portal компания, договор, заявка гостя, лимит
АПС физический проезд, билет, касса/платёж
CShark топология, фактические места, доступность, карта, инциденты, устройства
BI производные агрегаты, но не оперативное решение

Это пример, а не универсальное правило. Главное — у каждого поля должен быть один authoritative owner и понятные потребители.

Ownership matrix

До разработки заполните таблицу:

Сущность/поле Владелец Кто читает Направление SLA/freshness Конфликт
employee status СКУД АПС push/pull согласованный размер выборки владелец побеждает
vehicle plate владелец данных, определённый проектом CShark API согласованный размер выборки normalisation + audit
spot status CShark АПС, табло API/webhook near-real-time timestamp/order
physical passage АПС/controller CShark event/API согласованный размер выборки idempotent passage_id
tariff/payment payment APS CShark/BI API согласованный размер выборки ledger/reconciliation

Если поле «редактируется везде», интеграция уже спроектирована с конфликтом.

Три типа обмена

Pull: запрос текущего состояния

Подходит для справочника и восстановления:

  • доступность;
  • список мест;
  • состояние сессии;
  • конфигурация/версия.

Преимущество — потребитель сам выбирает момент. Недостаток — polling и задержка.

Push/webhook: уведомление об изменении

Подходит для оперативных событий. Webhook должен иметь:

  • event ID;
  • timestamp и version/schema;
  • подпись/секрет;
  • timeout и retry;
  • журнал попыток;
  • replay оператором;
  • идемпотентность у получателя.

Command: просьба выполнить действие

Команда отличается от события: она может быть принята, выполнена, отклонена или истечь. «HTTP 200» ещё не означает физическое открытие шлагбаума. Нужны command ID и подтверждение фактического результата.

CShark разделяет device.*, domain.*, command.* и integration.* контракты.

Идемпотентность: обязательный сценарий

Представим, что АПС запросила назначение места, но ответ потерялся. Она повторяет запрос.

Неправильное поведение: система создаёт второе назначение.

Правильное:

  • запрос имеет внешний стабильный reference/idempotency key;
  • тот же ключ и то же тело возвращают первоначальный результат;
  • тот же ключ с другим телом даёт конфликт;
  • retry после рестарта не меняет решение.

CShark allocation API использует external_ref и request signature; повтор возвращает существующий hold, конфликтующее тело отклоняется.

Семантика ошибок

Клиент должен отличать:

  • 401 — ключ отсутствует/недействителен;
  • 403 — не хватает scope или IP вне allowlist;
  • 404 — объект/entry point неизвестен;
  • 409 — конфликт состояния или идемпотентности;
  • 422 — тело не прошло контракт;
  • 5xx/timeout — результат неизвестен, безопасен только idempotent retry.

Ошибка «нет свободных мест» не равна «опечатка в entry point». В CShark неизвестная точка въезда возвращает 404, а не молчаливый ноль.

Пример интеграции: availability и allocation

  1. АПС получает ключ spots:read и при необходимости allocations:write.
  2. Запрашивает /integration/v1/availability?entry_point=....
  3. Ответ разделяет total, available, free, зоны, типы, reachability и unknown gates.
  4. Для подходящего автомобиля АПС отправляет allocation с типом доступа, entry point, типом места и внешним ref.
  5. CShark выбирает место, резервирует и возвращает route/guidance.
  6. External session связывает фактический визит; дальнейшие события обновляют состояние.
  7. Webhook сообщает об изменениях.

Этот API реализован. Конкретная АПС должна пройти mapping и совместное тестирование.

Защита интеграции

Минимальные scopes

Ключ для чтения доступности не должен создавать сессии. Чувствительные ГРЗ/фото требуют отдельного права.

Хранение ключа

Показывать raw secret один раз, хранить hash на сервере, исключить из логов и argv, предусмотреть rotation/revoke.

IP allowlist и сеть

Allowlist дополняет, но не заменяет TLS, сегментацию и firewall. Внутренний HTTP допустим только в защищённой архитектуре с принятым риском.

Аудит чувствительных данных

При чтении ГРЗ/фото CShark пишет аудит без самих ГРЗ и URL.

Rate limit и backpressure

Webhook delivery lifecycle

Webhook может быть «создан», «отправлен», «доставлен», «ошибка», «ожидает повтора». Администратору нужен журнал и безопасный replay.

Проверка должна включать:

  • 2xx;
  • timeout;
  • 500;
  • недействительный TLS certificate если используется HTTPS;
  • повтор;
  • получатель offline и затем online;
  • replay после исправления;
  • дубликат у получателя.

PERCo, ABLOY и другие вендоры

Для PERCo и ABLOY подготовлены требования и vendor-neutral контракты доступа, но готовые промышленный коннекторы и сертификация не входят в текущую поставку.

Корректная формулировка: «CShark имеет integration API и требования/контракты для совместного проекта». Некорректная: «готово интегрируется с любой версией PERCo/ABLOY».

Матрица приёмки интеграции

  1. Contract validation для каждого endpoint.
  2. Положительный поток.
  3. Неверный scope/key/IP.
  4. Дубликат и out-of-order.
  5. Timeout после commit и retry.
  6. Concurrent allocation одного последнего места.
  7. Закрытая зона и unknown gate.
  8. Webhook retry/replay.
  9. Rotation/revoke ключа.
  10. Data minimization: без чувствительного scope нет ГРЗ/фото.
  11. Backup/restart и восстановление курсоров.

FAQ

Кто должен быть источником истины по госномеру?

Зависит от процесса. Важно выбрать одного владельца записи и определить, где происходит нормализация и кто разрешает изменение.

REST или webhooks?

Обычно оба: webhook для оперативного изменения, REST для текущего состояния и восстановления после пропуска.

Что такое идемпотентность?

Повтор одного логического запроса не создаёт второе назначение, сессию или начисление. Для этого нужен стабильный ключ и серверная фиксация результата.

Есть ли готовая интеграция CShark с PERCo/ABLOY?

Требования и фундамент есть, готовые промышленные коннекторы и натурная сертификация не входят в текущую поставку.

Как защищать API key?

Минимальный scope, one-time display, hash at rest, TLS/сегментация, IP allowlist, rotation, revoke и исключение секрета из логов.

Граница применимости к CShark

Материал описывает проверяемый инженерный подход. Конкретный состав CShark зависит от версии, подключённых источников данных, прав, конфигурации и приёмки оборудования на объекте.

Посмотрите, какие возможности CShark доступны водителю и оператору и как они применяются на парковке, на странице возможностей системы.

Возможности CShark

Выберите возможности для вашего объекта

Посмотрите, как CShark помогает водителю, оператору и управляющей компании на парковке.

Посмотреть возможности