Cómo obtener rápidamente una gran cantidad de datos de Bitrix24 a través de la API REST

A menudo, cuando se trabaja con la API REST de Bitrix24, es necesario obtener rápidamente el contenido de ciertos campos de todos los elementos de una lista (por ejemplo, clientes potenciales). La forma tradicional de hacer esto es contactar al servidor a través de un método *.list



(por ejemplo, crm.lead.list



para clientes potenciales) con un parámetro que select



enumera la lista de campos obligatorios. Además, cuanto mayor sea el tamaño de la lista y más campos cargue, más tiempo tardará el servidor en dar una respuesta.





Además, debido a que la información la proporciona el servidor página a página, existen varias estrategias para obtener la lista completa, y algunas de ellas te permiten acelerar el proceso en órdenes de magnitud en comparación con las solicitudes secuenciales.





Estrategias

A continuación describimos tres estrategias, que tentativamente denominamos "filtro de ID", "Incremento inicial" y "Lista + obtener".





Las dos primeras estrategias ("Filtro de ID" e "Incremento de inicio") se proponen en la documentación oficial de Bitrix24 , pero a continuación proponemos "ajustarlas".





Filtro de ID

Las solicitudes se envían al servidor de forma secuencial con un parámetro "order": {"ID": "ASC"}



(ordenando en orden ascendente por ID), y cada solicitud posterior utiliza los resultados de la anterior (filtrado por ID, donde ID> ID máximo en los resultados de la solicitud anterior).





start = -1



( total



), *.list



.





: , , ID . , , , throttling.





Start increment

, start



, .





, , , ( , start



, ).





, ( total



), .





, . ( 50 .) , .





24 REST API . .





, , . .





get_all()



fast_bitrix24



( - ).





List + get

, "Start increment" ID *.list



( , ID - 'select': ['ID']



) , *.get



ID. " " " ".





, ( ).





( crm.lead.list



) 3 ( "ID filter" - ID). 1, 50, 100 200 .





fast_bitrix24 24.





7- REST API ~35000 .





Getting 1 pages:
ID filter: 0.3 sec.
Start increment: 0.73 sec.
Getting ID list for the 'list+get' strategy, method crm.lead: 2.17 sec.

List + get: 2.61 sec.

Getting 50 pages:
ID filter: 12.8 sec.
Start increment: 21.39 sec.
List + get: 1.84 sec.

Getting 100 pages:
ID filter: 49.67 sec.
Start increment: 39.97 sec.
List + get: 3.28 sec.

Getting 200 pages:
ID filter: 99.67 sec.
Start increment: 78.05 sec.
List + get: 6.36 sec.
      
      



, , ("Start increment" "List + get"), .





, , "List + get" , , . (, 24 ?)





No estoy seguro de la existencia de bibliotecas PHP de alto nivel que permitan al usuario implementar tales estrategias sin preocuparse por empaquetar solicitudes en lotes y organizar solicitudes paralelas con control de su velocidad. Pero si escribe en Python, puede usarlo fast_bitrix24



(consulte la página en Github ), que le permite descargar datos de Bitrix24 a una velocidad de hasta miles de elementos por segundo.








All Articles