API Catalog в /.well-known: как агенты находят ваши API
Что такое /.well-known/api-catalog (RFC 9727), зачем он AI-агентам, минимальный пример linkset, ошибки и как проверить.
Обновлено:
Что это
/.well-known/api-catalog (RFC 9727) — документ по предсказуемому адресу, который
ссылается на описания ваших API (OpenAPI, AsyncAPI и т.п.). Формат — linkset
(RFC 9264): набор ссылок с rel-типами. Это «оглавление» ваших программных
интерфейсов для машин.
Зачем это AI-агентам
Агент, которому нужно не прочитать страницу, а вызвать ваш API, должен сперва
его найти. Без каталога он гадает URL или парсит HTML-доки. api-catalog даёт
прямой машиночитаемый указатель: вот описание API, вот его endpoints — агент сразу
понимает, как с вами интегрироваться.
Минимальный рабочий пример
GET /.well-known/api-catalog HTTP/1.1
{
"linkset": [
{
"anchor": "https://example.com",
"service-desc": [
{ "href": "https://example.com/openapi.json", "type": "application/openapi+json" }
]
}
]
}
Content-Type: application/linkset+json. rel-типы (service-desc, service-doc)
указывают на описание и документацию API.
Правильно vs неправильно
| Правильно | Неправильно |
|---|---|
Лежит по /.well-known/api-catalog | Произвольный путь |
application/linkset+json, валидный linkset | Просто текст/HTML вместо linkset |
Абсолютные href, стандартные rel | Относительные ссылки / самодельные rel |
| Ссылается на реальные, доступные описания API | Битые ссылки на несуществующий OpenAPI |
Типичные ошибки
- Неверный
Content-Type— неapplication/linkset+json. - Битые ссылки на описания API (404 на OpenAPI).
- Относительные
hrefвместо абсолютных. - Каталог есть, но не анонсирован через
Link-заголовокrel="api-catalog"(см. гайд по Link-заголовкам).
Как проверить
Скан проверит наличие и формат каталога. Вручную:
curl -s https://example.com/.well-known/api-catalog | jq .
curl -sI https://example.com/.well-known/api-catalog | grep -i content-type
Ждём валидный linkset и application/linkset+json.