多くの場合、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からデータをダウンロードできます。