はじめに
AutodeskのForgeはいってみればBIMのリポジトリとビューワ、APIが一体化したサービスである。オープンソースのBIMサーバもあるが、変換機能などAPIの拡充具合を考慮するとこのサービスを使うのが一番良いように思う。RevitやIFC、OBJなど多様なファイルへのインポート、エクスポートも可能だ。現在無料だし。
認証について
Autodeskアカウントを作って、Forgeのサービスにログインし、まずはApplicationを作る。ここで作ったClient IDとClient Secretがポイントで、OAuthの認証に利用される。URLは何でもよいのでとりあえず入れておく必要がある。
まずは面倒だけれど、サンプルに沿ってcurlで認証をしてみよう。認証のAPIの仕様は以下となっている。
https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/
アクセストークンの取得
まずは取得したID、Secretを使ってアクセストークンを取得しないといけない。-d以下のパラメータにそれらを記述する。一番最後のscopeは、アクセスしているアプリ、ユーザの権限を示すもので、空欄で区切っていくつか入力できる。今回はすべてのデータにへアクセス、アップロードなどが可能なdata:readとdata:writeを二つ指定している。
curl -v 'https://developer.api.autodesk.com/authentication/v1/authenticate'
-X 'POST'
-H 'Content-Type: application/x-www-form-urlencoded'
-d 'client_id=xxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxx&grant_type=client_credentials&scope=bucket:create data:read data:write'
これがうまくいくと、以下のようにアクセストークンが得られる。これをメモしておく。
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","token_type":"Bearer","expires_in":3599}`
ファイルのアップロード
取得したアクセストークンを使って、IFCなどのBIMデータをアップロードする。ちなみにアップロードしたファイルにはリテンションポリシーが設定できる。transientとすると24時間でデータが消えるようになる。APIの仕様は以下。
https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-POST/
Bucketの作成
アップロードに先立って、ファイルの入れ物(Bucket)を作成する。先ほどのアクセストークンを使って、リクエストする。bucketKeyは何でもよいのだが、他と被っていると怒られる。GUIDやクライアントIDなどを生成して、後ろに適当につけるとよい。
curl -v 'https://developer.api.autodesk.com/oss/v2/buckets'
-X 'POST' -H 'Content-Type: application/json'
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
-d '{"bucketKey":"mybucket_xxxxxx","policyKey":"transient"}'
成功すると以下の感じのレスポンスがある。
{"bucketKey":"mybucket_xxxxxx","bucketOwner":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","createdDate":1528027336176,"permissions":[{"authId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","access":"full"}],"policyKey":"transient"}
ファイルのアップロード
Bucketができて、ようやくBIMデータのアップロードができる。Contents-Lengthは必須だそうだが、普通のクライアントは自動的に追加すると思われる。ここではHelloWall.ifcというファイルをアップした。
curl -v 'https://developer.api.autodesk.com/oss/v2/buckets/mybucket_xxxxxx/objects/HelloWall.ifc'
-X 'PUT'
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxx'
-H 'Content-Type: application/octet-stream'
-H 'Content-Length: 100000000 ファイルのサイズ(byte)'
-T 'HelloWall.ifc'
これもうまくいくと以下のようなレスポンスがある。
{
"bucketKey" : "mybucket_xxxxxx",
"objectId" : "urn:adsk.objects:os.object:mybucket_xxxxxx/HelloWall.ifc",
"objectKey" : "HelloWall.ifc",
"sha1" : "6b6acf973e033af4aea85158b106adedef30cd1f",
"size" : 6033,
"contentType" : "application/octet-stream",
"location" : "https://developer.api.autodesk.com/oss/v2/buckets/mybucket_xxxxxx/objects/HelloWall.ifc"
* Connection #0 to host developer.api.autodesk.com left intact
}]
ここまでの作業は一応手でやってみたが、サンプルプログラムでは自動的にその辺をやっている。NodeJSのサンプルビューワを起動すると、先ほどのファイルがアップされているのがわかる。
まずはここまで。