Freqüentemente, ao trabalhar com a API REST Bitrix24, torna-se necessário obter rapidamente o conteúdo de determinados campos de todos os elementos de uma lista (por exemplo, leads). A maneira tradicional de fazer isso é contatar o servidor por meio de um método *.list
(por exemplo, crm.lead.list
para leads) com um parâmetro que select
lista a lista de campos obrigatórios. Além disso, quanto maior o tamanho da lista e mais campos você carrega, mais tempo o servidor leva para formar uma resposta.
Além disso, pelo fato de as informações serem fornecidas pelo servidor página a página, existem várias estratégias para obter a lista completa, e algumas delas permitem acelerar o processo em ordens de magnitude em relação às solicitações sequenciais.
Estratégias
Abaixo, descrevemos três estratégias, que denominamos provisoriamente de "filtro de ID", "Iniciar incremento" e "Listar + obter".
As duas primeiras estratégias ("Filtro de ID" e "Incremento de início") são propostas na documentação oficial do Bitrix24 , mas a seguir propomos "apertá-las".
Filtro de ID
As solicitações são enviadas ao servidor sequencialmente com um parâmetro "order": {"ID": "ASC"}
(classificação em ordem crescente por ID) e cada solicitação subsequente usa os resultados da anterior (filtragem por ID, onde ID> ID máximo nos resultados da solicitação 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 ?)
Não tenho certeza sobre a existência de bibliotecas de PHP de alto nível que permitem ao usuário implementar tais estratégias sem se preocupar em empacotar solicitações em lotes e organizar solicitações paralelas com controle de sua velocidade. Mas se você escreve em Python - você está convidado a usar fast_bitrix24
(veja a página no Github ), que permite que você baixe dados do Bitrix24 a uma velocidade de até milhares de elementos por segundo.