При интеграции 1С с внешними API часто возникает необходимость передавать сложные вложенные структуры данных. Одной из распространенных проблем является ошибка HTTP 405 (Method Not Allowed), а также сложности с корректной сериализацией данных. Давайте разберем, как правильно формировать JSON-запросы и на что обратить внимание при отладке.
Для создания вложенных структур в 1С лучше всего использовать связку объектов Структура, Массив и ЗаписьJSON. В отличие от простой записи, ЗаписьJSON позволяет более гибко контролировать итоговый вид строки.
Пример формирования структуры типа Bundle (часто используемой в стандартах типа FHIR):
Bundle = Новый Структура;
entry = Новый Массив;
fullUrl = Новый Структура;
resource = Новый Структура;
identifier = Новый Массив;
system = Новый Структура;
Bundle.Вставить("resourceType", "Bundle");
Bundle.Вставить("type", "collection");
Bundle.Вставить("entry", entry);
fullUrl.Вставить("fullUrl", "3213215");
fullUrl.Вставить("resource", resource);
resource.Вставить("resourceType", "tract");
resource.Вставить("identifier", identifier);
system.Вставить("system", "codes");
system.Вставить("value", "123");
identifier.Добавить(system);
entry.Добавить(fullUrl);
// Сериализация в строку
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Bundle);
СтрокаДляЗапроса = ЗаписьJSON.Закрыть();
Важно помнить: если при отладке вы используете функцию Сообщить() или выводите JSON в поле формы, 1С может обрезать длинную строку. Это не означает, что данные сформированы неверно. Для проверки полного текста используйте ЗаписатьТекстовыйФайл().
Ошибка 405 Method Not Allowed означает, что сервер получил запрос, но не поддерживает указанный HTTP-метод для данного ресурса. Чаще всего причина кроется не в теле JSON, а в конфигурации HTTP-соединения:
POST, PUT, PATCH или GET). Если API ждет PUT, а вы отправляете POST, сервер вернет 405./api/v1/resource/123.Content-Type: application/json, сервер может отклонить запрос еще до анализа тела.Для того чтобы понять, что именно происходит при передаче данных, выполните следующие шаги:
Postman запрос работает, а из 1С нет, значит, 1С добавляет лишние заголовки или использует некорректный метод. Скопируйте RAW-тело из Postman и сравните его с результатом вашей функции ЗаписатьJSON.HTTPЗапрос. Установите заголовки вручную:
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса, "utf-8");
Помните: Если вы используете структуру с типами данных 1С (ссылки, даты, GUID), их нужно предварительно преобразовать в строку с помощью функции Строка() или УникальныйИдентификатор(), так как стандартный сериализатор JSON может неверно обработать внутренние типы платформы.
Если проблема сохраняется, обязательно запросите логи у администратора сервера, к которому обращаетесь. Часто в логах сервера содержится детальная причина отказа, которая гораздо информативнее стандартного кода ошибки 405.