Forge API の 1 つである Design Automation API は、他の API 同様、継続した改善、改良をおこなっています。
ここ最近の改良では、Design Automation API for Revit のパフォーマンスが、次の 2 点で改善されています。
- Design Automation API では、WorkItem のリクエスト時、すべてのリクエストはキューに蓄積されて、実行環境が仮想マシン(AMI)により動的に作成されて処理されます。
この際、短い時間に多くのリクエストが集中してしまうと、仮想マシンの確立(スピンアップ)に時間がかかってしまい、pending レスポンスが返るような場面が見られことがあります。Design Automation API for Revit では、仮想マシンのスピンアップの待ち時間が短縮するよう改善を加えて、WorkItem の処理時間全体を短縮する努力を続けています。

- Design Automation API for Revit が WorkItem 毎に使用する仮想マシンの仕様が強化され、最大メモリ量の合計が、従来の 16GB から 32GB に増加しています。これにより、大規模な Revit プロジェクトを使用した AppBundle(アドイン)の実行パフォーマンスが従来より改善しているはずです。
この他、Design Automation API がサポートするすべてのコアエンジン(UI のない AutoCAD、Revit、Inventor、3ds Max)で、WebSocket を使った WorkItem リクエストと通知メカニズムがサポートされるようになりました。
- 従来、WorkItem リクエストは、RESTful API として用意されている POST workItems endpoint 呼び出しでおこなっていました、また、WorkItem 処理の進捗状況と完了には OnProgress、OnComplete コールバックによって通知を得ることが出来ました。
ただ、コールバックは URL 指定が必要なため、Web サーバー実装を介した実装が必須になってしまいます。このため、クライアントが WorkItem の進捗と完了を知るには、通常、GET workitems/:id endpoint を使ったポーリング処理を、Web サーバー上にルーティングした endpoint を介して検出しているかと思います。

今回、この処理に WebSocket を用いた API が追加されています。具体的には、クライアントとして使用するデバイスと Forge サーバーとの間にリンクを確立して、直接、WorkItem のリクエストや進捗、完了通知を得ようとするものです。

これによって、冗長なコミュニケーションの低減出来るようになります。ただ、リンクの確立はデバイス毎になってしまうため、RESTful 呼び出しと相対比較して十分な効果が得られるか、テストと評価をお勧めしています。
- WebSocket API の使用が常にベストなわけではありません。また、従来の RESTful API を使った運用を置き換えていくものでもありません。既に、Web サーバー実装で OnComplete コールバックを運用している場合には、特に明示的な理由がない限り、WebSocket API に移行する必要性はありません。
- WebSocket API を利用した場合でも、pending ステータスの状況がなくなる訳ではありません。
Design Automation API・WebSocket APIの詳細は、Forge ポータルのドキュメントをご確認ください。
Developer’s Guide:
https://forge.autodesk.com/en/docs/design-automation/v3/developers_guide/websocket-api/
Reference:
https://forge.autodesk.com/en/docs/design-automation/v3/reference/websocket/
AutoCAD Web アプリの PDF 出力機能では、ここでご紹介した Design Automation API の WebSocket API が内部的に使用されています。

By Toshiaki Isezaki

You must be logged in to post a comment.