Формат ответа проверки работоспособности для HTTP API

Формат ответа проверки работоспособности для HTTP API

4 июня 2023 г.

Я продолжаю знакомиться с HTTP API, читая соответствующий запрос на комментарии. На этот раз я прочитал Формат ответа проверки работоспособности для HTTP API по предложению Стефано Фаго. В этом посте я хотел бы подвести итог прочитанному.

Обратите внимание, что это черновик. Более того, он бездействовал почти два года и, таким образом, автоматически истек. Тем не менее, он наиболее близок к спецификации проверки работоспособности и поэтому заслуживает уважения.

Пример визуализации данных

Несмотря на то, что это не длинное чтение, оно немного "сухое". К счастью, в спецификации есть образец JSON. Я скопировал его в PlantUML, и вуаля, он показывает его визуальное представление:

Давайте рассмотрим предложенную структуру поэлементно.

Корневой объект

В простейшем случае ответ представляет собой объект JSON с обязательным свойством status:

Значения могут быть:

* pass для работоспособного статуса. Значение также может быть ok (для NodeJS) и up (для Spring Boot) для учета существующих библиотек проверки работоспособности. Код состояния HTTP должен находиться в диапазоне от 2xx до 3xx. * warn для работоспособного состояния, но с проблемами в том же диапазоне состояний HTTP. * fail для обозначения неработоспособного состояния. Возможные альтернативные значения включают error (NodeJS) и down (Spring Boot). Код состояния HTTP должен находиться в диапазоне от 4xx до 5xx.

Можно добавить дополнительные необязательные значения:

  • версия: общедоступная версия службы
  • .
  • releaseId: внутренняя версия службы. Например, версия будет увеличена для несовместимых изменений, а releaseId может быть хэшем фиксации или семантической версией.
  • serviceId: уникальный идентификатор службы
  • описание: говорит само за себя
  • заметки: массив неструктурированных заметок
  • вывод: простое сообщение об ошибке в случае pass или warn. Поле следует оставить пустым для pass.

Объекты links

Объект links состоит из пар объектов. Значения — это URI, а ключи могут быть URI или общими/зарегистрированными: см. RFC5988. общие значения, например,, self.

Объекты checks

Ключи объектов checks состоят из двух терминов, разделенных двоеточием, имени компонента и имени измерения. Последнее может быть:

* Предустановленное значение: использование, responseTime, соединения или время безотказной работы. * Стандартный термин из известного источника, например,, IANA, microformat.org и т. д. * URI

Значения состоят из одного из следующих ключей:

* componentId: уникальный идентификатор этого компонента * тип компонента: * Предустановленное значение, компонент, хранилище данных или система. * Стандартный термин из известного источника, например,, IANA, microformat.org и т. д. * URI * observedValue: любое допустимое значение JSON. * observedUnit: единица измерения * status: как статус родительского объекта, но только для этого компонента * affectedEndpoints: если компонент не является pass, перечисляются все затронутые конечные точки. * время: дата-время наблюдения в формате ISO8601. * output: как вывод родительского объекта, но только для этого компонента * ссылки: см. предыдущий раздел * Любое другое нестандартное значение

Я попытался реализовать описанное выше с помощью Spring Boot, используя собственный HealthIndicator. Вот лучшее, что я смог придумать:

Текущая структура ответа JSON должна быть (легко?) настраиваемой. Вам нужно будет создать свою конечную точку. Я надеюсь, что команда Spring Boot предоставит возможность создать совместимую структуру.

Заключение

Предварительный проект Healthcheck IETF — это отличная инициатива по стандартизации проверок работоспособности в отрасли. Это позволит инструментам мониторинга полагаться на статус HTTP и тело ответа без специальной настройки для каждой службы.

К сожалению, срок действия черновика истек из-за отсутствия активности. Однако я бы хотел, чтобы его возродили.

Дальше:

* API проверки работоспособности * "Привод Spring Boot: работоспособность"


:::информация Первоначально опубликовано на странице Знаток Java, 28 мая 2023 г.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE