Data Management API:’List Objects’ API の変更について

General Data Protection Regulation について でご案内した GDPR 対応のため、クラウド業界がにわかにざわついているように感じます。オートデスクも  https://www.autodesk.com/trust/privacy-and-compliance の最後の部分で GDPR 対応を表明していますが、Forge もその対象です。

Text summary of GDPR compliance and obligations for Autodesk, detailing the regulation's impact on companies and commitment to compliance.

GDPR の施行は 5 月からですが、事前の GDPR 対応のため、4 月を目途に Forge の Data Management API にも 一部の RESTful API に変更が加えられる予定です。ここでは、具体的にどの endpoint に、どのような変更が加えられるかをご案内しておきます。なお、変更が反映された時点で、ADN オープンの Facebook ページでご案内する予定です。に

変更が発生するのは、GET /oss/v2/buckets/<bucket-name>/objects endpoint のレスポンスです。この endpoint は、Object Storage Service (OSS) に保存されている Bucket 内のコンテンツをリストとして JSON 形式で返すものです。この API をお使いの方には、コードの変更が必要になる可能性がありあます。ご不便をお掛けしますが、ご対応をお願いいたします。

変更点:

  1. レスポンス結果は語彙順序(アルファベット等)にならな場合がある
  2. 次ページの結果を取得するために指定する startAt クエリ パラメータの値が異なる形式にな変更になる
  1. については、アプリケーションが結果が特定の順序で返されると仮定してはならないということを単に意味するものです。
  2. について、アプリケーション/サービスが単にレスポンスの ”next”フィールドの値を読み取って処理をしている場合には、その URL には要求を処理するのに必要なすべてのクエリ パラメータが含まれるのでコードの変更は不要です。ただし、その URL をパースしてパラメータを抽出している場合には、startAt パラメータの値を変更するとコードの変更になることがあります。

例:

“test-bucket” の名称で Bucket を作成し、”file-0001″ から “file-0100” までのファイル名で 100 ファイルをアップロードしていると仮定します。

オリジナルの ‘List Objects’ endpoint は次のように動作します。

GET /oss/v2/buckets/test-bucket/objects (オリジナル API)

{
  "items" : [
    {
      "bucketKey" : "test-bucket",
      "objectKey" : "file-0001",
      "objectId" : "urn:adsk.objects:os.object:test-bucket/file-0001",
      "sha1" : "da39a3ee5e6b4b0d3255bfef95601890afd80709",
      "size" : 9,
      "location" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0001"
    },
    ... その他 8 アイテムが返る ...
    {
      "bucketKey" : "test-bucket",
      "objectKey" : "file-0010",
      "objectId" : "urn:adsk.objects:os.object:test-bucket/file-0010",
      "sha1" : "da39a3ee5e6b4b0d3255bfef95601890afd80709",
      "size" : 9,
      "location" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0010"
    }
  ],
  "next" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects?startAt=file-0010"
}

レスポンスの “next” フィールドを使用するだけで、次のページをリクエストできました。

GET /oss/v2/buckets/test-bucket/objects?startAt=file-0010 (オリジナル API)

{
  "items" : [
    {
      "bucketKey" : "test-bucket",
      "objectKey" : "file-0011",
      "objectId" : "urn:adsk.objects:os.object:test-bucket/file-0011",
      "sha1" : "da39a3ee5e6b4b0d3255bfef95601890afd80709",
      "size" : 9,
      "location" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0011"
    },
    ... その他 8 アイテムが返る ...
    {
      "bucketKey" : "test-bucket",
      "objectKey" : "file-0020",
      "objectId" : "urn:adsk.objects:os.object:test-bucket/file-0020",
      "sha1" : "da39a3ee5e6b4b0d3255bfef95601890afd80709",
      "size" : 9,
      "location" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0020"
    }
  ],
  "next" : "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects?startAt=file-0020"
}

同様の処理は “next” フィールドがなくなる迄繰り返せました。 

GET /oss/v2/buckets/test-bucket/objects?startAt=file-0090 (ORIGINAL API)

{
"items": [
{
"bucketKey": "test-bucket",
"objectKey": "file-0091",
"objectId": "urn:adsk.objects:os.object:test-bucket/file-0091",
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 9,
"location": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0091"
},
    ... その他 8 アイテムが返る ...
{
"bucketKey": "test-bucket",
"objectKey": "file-0100",
"objectId": "urn:adsk.objects:os.object:test-bucket/file-0100",
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 9,
"location": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0100"
}
]
}

このように、オブジェクトはアルファベット順に返され、”next” フィールドの “startAt” クエリ パラメータ は objectKey として簡単に解釈できました。このような動作は、次のような新しい動作に変更されることになります。

GET /oss/v2/buckets/test-bucket/objects (新 API)

{
"items": [
{
"bucketKey": "test-bucket",
"objectKey": "file-0061",
"objectId": "urn:adsk.objects:os.object:test-bucket/file-0061",
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 0,
"location": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0061"
},
{
"bucketKey": "test-bucket",
"objectKey": "file-0098",
"objectId": "urn:adsk.objects:os.object:test-bucket/file-0098",
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 0,
"location": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0098"
},
    ... その他 7 アイテムが返る ...
{
"bucketKey": "test-bucket",
"objectKey": "file-0067",
"objectId": "urn:adsk.objects:os.object:test-bucket/file-0067",
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 0,
"location": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects/file-0067"
}
],
"next": "https://developer.api.autodesk.com/oss/v2/buckets/test-bucket/objects?startAt=7%7C"
}

このように、新しい動作ではレスポンス結果は順序だった整然なものではなくなります。”next” フィールドは次のページを取得するために使うことができますが、もはや単純な objectKey ではなくなります。つまり、startAtフィールドが何であるかに関係なく、次のページを取得するために直接使用すべきではありません。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading