RESTAPIを介してBitrix24から大量のデータをすばやく取得する方法

多くの場合、Bitrix24 REST APIを使用する場合、リストのすべての要素(リードなど)の特定のフィールドの内容をすばやく取得する必要があります。これを行う従来の方法は、必須フィールドのリストをリストするパラメーターを使用して、メソッド*.list



(たとえば、crm.lead.list



リードの場合)を介してサーバーに接続することselect



です。さらに、リストサイズが大きく、アップロードするフィールドが多いほど、サーバーが応答を形成するのにかかる時間が長くなります。





さらに、情報はサーバーによってページごとに提供されるため、リスト全体を取得するためのいくつかの戦略があり、それらのいくつかでは、順次要求と比較して、プロセスを大幅に高速化できます。





戦略

以下では、「IDフィルタ」、「増分開始」、「リスト+取得」という3つの戦略について説明します。





最初の2つの戦略(「IDフィルター」と「開始増分」)は、公式のBitrix24ドキュメント提案されていますが、以下では、それらを「強化」することを提案します。





IDフィルター

リクエストはパラメータ"order": {"ID": "ASC"}



(IDの昇順で並べ替え)を使用して順番にサーバーに送信され、後続の各リクエストは前のリクエストの結果を使用します(IDでフィルタリングします。ID>前のリクエストの結果の最大ID)。





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





ユーザーがリクエストをバッチにパックしたり、速度を制御して並列リクエストを整理したりすることなく、このような戦略を実装できる高レベルのPHPライブラリの存在についてはよくわかりません。ただし、Pythonで記述している場合fast_bitrix24



は、(Githubページを参照)使用できます。これにより、1秒あたり最大数千要素の速度でBitrix24からデータをダウンロードできます。








All Articles