Comment obtenir rapidement beaucoup de données de Bitrix24 via l'API REST

Souvent, lorsque vous travaillez avec l'API REST Bitrix24, il devient nécessaire d'obtenir rapidement le contenu de certains champs de tous les éléments d'une liste (par exemple, les prospects). La manière traditionnelle de le faire est de contacter le serveur via une méthode *.list



(par exemple, crm.lead.list



pour les prospects) avec un paramètre select



répertoriant la liste des champs obligatoires. De plus, plus la taille de la liste est grande et plus vous téléchargez de champs, plus le serveur met du temps à former une réponse.





De plus, du fait que les informations sont fournies par le serveur page par page, il existe plusieurs stratégies pour obtenir la liste complète, et certaines d'entre elles vous permettent d'accélérer le processus de plusieurs ordres de grandeur par rapport aux requêtes séquentielles.





Stratégies

Ci-dessous, nous décrivons trois stratégies, que nous avons provisoirement appelées "ID filter", "Start increment" et "List + get".





Les deux premières stratégies ("ID filter" et "Start increment") sont proposées dans la documentation officielle de Bitrix24 , mais ci-dessous nous proposons de les "resserrer".





Filtre d'identification

Les requêtes sont envoyées au serveur de manière séquentielle avec un paramètre "order": {"ID": "ASC"}



(tri par ordre croissant par ID), et chaque requête ultérieure utilise les résultats de la précédente (filtrage par ID, où ID> ID maximum dans les résultats de la requête précédente).





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 ?)





Je ne sais pas s'il existe des bibliothèques PHP de haut niveau qui permettent à l'utilisateur de mettre en œuvre de telles stratégies sans se soucier de regrouper les demandes en lots et d'organiser des demandes parallèles avec le contrôle de leur vitesse. Mais si vous écrivez en Python, vous pouvez l'utiliser fast_bitrix24



(voir la page sur Github ), qui vous permet de télécharger des données depuis Bitrix24 à une vitesse pouvant atteindre des milliers d'éléments par seconde.








All Articles