RETS (Real Estate Transaction Standard) — открытый протокол обмена данными объектов недвижимости, а запрос «rets standard small» обычно возникает у разработчиков, которым нужно подключить небольшую MLS-систему или сайт агентства к RETS-серверу без развёртывания тяжёлой инфраструктуры. Проблема в том, что полный стек RETS с авторизацией по дайджесту, сессионными cookie и XML-метаданными выглядит избыточным для маленького проекта, поэтому ищут компактный вариант реализации.

В этой статье разберём, что стоит за понятием «small» в контексте RETS, как устроен протокол, какие библиотеки подходят для лёгкой интеграции и на что обратить внимание при выгрузке листингов. Отдельно рассмотрим переход на RESO Web API, который постепенно вытесняет классический RETS.

Что такое RETS и откуда взялся термин «small»

RETS разработан организацией RESO (Real Estate Standards Organization) как единый способ передачи данных между MLS (Multiple Listing Service) и внешними системами: сайтами агентств, CRM, аналитическими сервисами. Протокол работает поверх HTTP/HTTPS и возвращает данные в компактном текстовом или XML-формате.

Термин «small» в запросах обычно означает одно из трёх: компактный формат ответа COMPACT (в отличие от XML), минимальную клиентскую реализацию для небольшого проекта или работу с малой MLS, где объём листингов невелик и полноценная ETL-инфраструктура не нужна. Во всех трёх случаях логика работы одинакова: логин, запрос метаданных, поиск, выгрузка, логаут.

RETS официально признан устаревшим: RESO рекомендует новым интеграциям использовать RESO Web API на базе OData, но множество MLS-серверов до сих пор отдают данные только через RETS.

Как устроен протокол: основные транзакции

Клиент RETS общается с сервером через набор стандартных транзакций. Понимание их последовательности важнее, чем знание конкретной библиотеки — логика везде одинаковая.

  • 🔐 Login — аутентификация по HTTP Digest, получение сессионного cookie и URL-адресов остальных сервисов.
  • 📋 GetMetadata — загрузка описания ресурсов, классов и полей (фактически схемы данных конкретной MLS).
  • 🔍 Search — запрос листингов с фильтрами на языке DMQL (или DMQL2).
  • 🖼️ GetObject — скачивание фотографий и документов объектов.
  • 🚪 Logout — завершение сессии, обязательное для корректной работы лимитов сервера.

Обратите внимание: названия ресурсов, классов и системные имена полей у каждой MLS свои. Универсального маппинга не существует — схему всегда нужно читать через GetMetadata конкретного сервера, а не копировать из чужих примеров.

Компактный формат COMPACT и COMPACT-DECODED

Параметр Format в поисковом запросе определяет вид ответа. Для «лёгких» интеграций чаще всего выбирают COMPACT-DECODED — табличный текст, где поля разделены табуляцией, а значения уже раскодированы в читаемый вид (например, вместо кода статуса возвращается его текстовое обозначение).

Типичный поисковый запрос выглядит так:

SearchType=Property&Class=RES&Query=(Status=|Active)&Format=COMPACT-DECODED&Limit=100

Имена классов (Property, RES) и значения статусов здесь приведены как пример — у вашей MLS они могут отличаться. Сверяйте их с метаданными сервера перед запуском выгрузки.

📊 Как вы планируете получать данные из MLS?