Урок
Урок 6. Два коротких разговора по HTTP
Результат: учебная 1С отвечает на один запрос `GET`, а отдельный модуль получает курс из локального имитатора внешнего API и отличает успешный ответ от ошибки.
- Время
- Самостоятельная практика
- Артефакт
- GET-маршрут 1С и клиент локального имитатора внешнего API
- Контрольная точка
- Успешные и ошибочные ответы подтверждены реальными вызовами в учебном контуре
Результат: учебная 1С отвечает на один запрос
GET, а отдельный модуль получает курс из локального имитатора внешнего API и отличает успешный ответ от ошибки.
Здесь два направления связи. Сделай их по очереди в двух задачах одного проекта Codex: сначала запрос к 1С, затем запрос из 1С. Понадобится учебная база из прошлого урока и локальная публикация, доступная только в твоём тестовом контуре. Никаких рабочих ключей и внешней публикации.
Часть A. Проверяем, что сервис 1С отвечает
Начни с контракта без чтения документов и без записи: GET /hs/ai_course/ping возвращает HTTP 200, Content-Type: application/json и {"status":"ok","version":1}. Другой метод должен получить 405. Реальный путь публикации базы и права доступа зависят от твоей среды; не подставляй URL из чужого примера.
Начни задачу «HTTP-сервис 1С». Сначала попроси агента исследовать исходники:
Найди существующие HTTP-сервисы и структуру их обработчиков
в этой учебной конфигурации. Ничего не меняй. Предложи минимальный
HTTP-сервис для GET /hs/ai_course/ping с JSON-ответом
{"status":"ok","version":1}. Покажи точные объекты, файлы,
маршрут, требуемые права и способ проверить его локально.
Укажи, какая часть проверки потребует публикации учебной базы.
После сверки объектов попроси агента создать сервис в учебном исходном наборе: только этот маршрут, GET и явный ответ 405 для POST. Попроси показать diff и статические проверки до загрузки в базу. В конфигураторе учебной базы собери и проверь результат, затем опубликуй её в локальном тестовом контуре разрешённым способом. Подставь свой адрес публикации в команды ниже и сравни статус, тип и JSON с контрактом:
curl.exe -i "<адрес-учебной-базы>/hs/ai_course/ping"
curl.exe -i -X POST "<адрес-учебной-базы>/hs/ai_course/ping"
Первый ответ должен быть 200, второй — 405. Если база не опубликована, исходники могут быть готовы, но HTTP-поведение пока не проверено.
Часть B. Вызываем внешний API из 1С
Для упражнения стороннюю систему заменяет маленький локальный сервер на 127.0.0.1. Контракт: GET /v1/rates?code=EUR отвечает {"code":"EUR","rate":95.25}; неизвестный код даёт 404, режим ошибки — 503, медленный ответ позволяет проверить таймаут. Число 95.25 вымышленное и не является настоящим курсом валют.
Начни новую задачу «Клиент внешнего API» в том же проекте. Попроси агента сначала создать имитатор в папке курса из стандартной библиотеки Python и показать точные команды запуска и остановки. Он должен реализовать именно эти четыре ответа. Проверь успех и одну ошибку через curl.exe до изменения 1С: так ты знаешь, что сервер отвечает как договорились.
Теперь дай агенту вторую задачу:
Создай в учебных исходниках небольшой модуль-клиент для локального API
GET /v1/rates?code=EUR. Передавай адрес сервера параметром или через
тестовую настройку, не зашивай секреты. Верни вызывающему коду код
валюты и число при HTTP 200; отдельно обработай 404, 503, ошибочный
JSON и таймаут. Ничего не записывай в базу. Автоматические повторы
не добавляй. Предложи минимальный тестовый способ вызвать модуль из
учебной 1С и увидеть результат каждого случая. Сначала покажи план
и примеры результата, затем diff и статическую диагностику.
Не запускай изменение базы сам.
В учебной 1С вызови модуль для успеха, 404, 503 и таймаута. Сравни полученные значения и ошибки с прямыми ответами имитатора. Если сервер работает на другом компьютере, 127.0.0.1 из процесса 1С укажет на его машину; подставь доступный адрес только внутри изолированного тестового контура.
Что считать результатом
Для сервиса нужен реальный ответ curl.exe от опубликованной учебной 1С. Для клиента — реальные вызовы локального имитатора из 1С с успехом и ошибками. Проверка BSL сама по себе не подтверждает ни маршрут, ни сеть. Если публикация недоступна, можно закончить клиентскую часть отдельно и вернуться к сервису позже.