ConnectorClass API Extension
Содержание
Overview
Расширение API ConnectorClass по сути сводится к созданию Restful API сервера. При расширении возможностей API для ConnectorClass необходимо включить две части информации:
- Указать информацию об адресе API в поле
spec.apiConnectorClass. Это позволяет системе знать текущий адрес API для ConnectorClass. См. раздел «API Address Specification». - Реализовать Restful API сервер для ConnectorClass. См. раздел «API Definition Specification».
API Address Specification
Информация об адресе API должна быть указана в поле spec.api ConnectorClass.
Ограничений на то, находится ли сервис API ConnectorClass внутри текущего кластера, нет. Главное, чтобы система Connectors могла достучаться до адреса сервиса.
Конфигурация полей может ссылаться на описание connectorclass api в connectorclass.
API Definition Specification
API Address
Когда система Connectors получает запрос от клиента, она перенаправляет запрос на адрес API ConnectorClass, к которому принадлежит Connector.
Адрес API имеет формат {connectorclass.status.api.address.url}/{resource-name}
Authentication Information
При пересылке API-запросов система Connectors передаёт информацию об аутентификации сервису API ConnectorClass через Http Header.
Информация об аутентификации включает:
Tool Address Information: передаётся через Http HeaderX-Plugin-Meta.Authentication Type: передаётся через Http HeaderX-Plugin-Auth.Authentication Data: передаётся через Http HeaderX-Plugin-Secret.
X-Plugin-Meta
Значение — это строка, закодированная в Base64, содержащая {"baseURL":"Адрес инструмента Connector"}. Например:
{"baseURL":"http://github.com"} кодируется в eyJiYXNlVVJMIjoiaHR0cDovL2dpdGh1Yi5jb20ifQ==
При декодировании Base64 из заголовка получается JSON-строка {"baseURL":""}, где значение baseURL — это адрес доступа к инструменту.
X-Plugin-Auth
Значение — это строка, закодированная в Base64, представляющая K8S Secret Type.
Например, kubernetes.io/basic-auth кодируется в a3ViZXJuZXRlcy5pby9iYXNpYy1hdXRo
При декодировании Base64 из заголовка получается Secret Type.
X-Plugin-Secret
Значение — это строка, закодированная в Base64, представляющая JSON-строку с K8S Secret Data.
Например, {"username":"YWRtaW4=","password":"c2VjcmV0"} кодируется в eyJ1c2VybmFtZSI6IllXUnRhVzQ9IiwicGFzc3dvcmQiOiJjMlZqY21WMCJ9
При декодировании Base64 из заголовка получается JSON-строка {"username":"YWRtaW4=","password":"c2VjcmV0"}. Для получения значения ключа необходимо повторно декодировать значение из base64, чтобы получить исходное значение.
Пример запроса
Pagination Information
Указывается через параметры Query:
Response
При возврате списка структура должна быть следующей:
Если ответ не 200, возвращаемая структура данных должна соответствовать k8s status
Например:
Определения полей и значения перечислений соответствуют k8s status
Resource Naming
Разработчики могут определять самостоятельно. Рекомендуется:
- Имя в нижнем регистре во множественном числе
- Имя должно быть уникальным в пространстве имён текущего ConnectorClass и соответствовать существующим отраслевым соглашениям по именованию