Como obter rapidamente muitos dados do Bitrix24 por meio da API REST

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.








All Articles