API-интерфейс Autodesk Forge createBucket не работает

Я пытаюсь создать приложение, используя autodesk-forge-api. Для начала я создал приложение в своей конфигурации Autodesk для получения «ClientID» и «Client Secret», которые необходимы для выполнения вызовов API.

Каким-то образом, когда я пытаюсь использовать вызов createBucket-API, который документирован здесь я получаю ответ bad request 400 и не знаю почему.

вот мой вызов API:

let oAuth2TwoLegged = new ForgeSDK.AuthClientTwoLegged(clientId, 
  clientSecret, [
  'data:read',
  'data:write',
  'bucket:create',
  'bucket:read',
  'data:write',
  'data:read',
  'viewables:read'           
], autoRefresh);

oAuth2TwoLegged.authenticate().then(function(credentials){

  var HubsApi = new ForgeSDK.HubsApi(); //Hubs Client
  var BucketsApi = new ForgeSDK.BucketsApi(); //Buckets Client

  BucketsApi.createBucket({bucketKey :"Test", policyKey: "transient"},{}, oAuth2TwoLegged, credentials).then((response) => {
    console.log(' new BUCKET: ', response)
  }).catch((err) => {
    console.log('ERROR BLA: ', err)
  });

}).catch((err) => {
  console.log('oauth error: ', err)
})

У кого-нибудь есть предложение, что я могу делать неправильно?

когда я использую другой вызов, например этот:

BucketsApi.getBuckets({}, oAuth2TwoLegged, credentials).then(function(response){
   console.log('buckets: ', response.body);
  }, function(err){
    console.error(err);
});

оно работает...

ИЗМЕНИТЬ

Если я сделаю следующее:

BucketsApi.createBucket(xyda_select_rtl, {'bucketKey' :'xyda_select_rtl', 
   'policyKey': 'transient'}, oAuth2TwoLegged, credentials).then((response) => {
    console.log(' new BUCKET: ', response)
  }).catch((err) => {
    console.log('ERROR BLA: ', err)
});

Я получаю xyda_select_rtl не определяется!?!

Когда я добавляю:

var xyda_select_rtl;

Я получаю сообщение об ошибке Missing the required parameter 'postBuckets' when calling createBucket

Эм.... да :-/




Ответы (2)


Вам нужно придумать уникальное имя для ваших ведер, извините за плохие новости. Это не так плохо, как вы думаете. Например, просто добавьте свой client_id к имени корзины:

"test-tAp1fqjjtcgqS4CKpCYDjAyNbKW4IVCC"

Или используйте случайное руководство, сгенерированное кодом:

function guid() {

    var d = new Date().getTime();

    var guid = 'xxxx-xxxx-xxxx'.replace(
      /[xy]/g,
      function (c) {
        var r = (d + Math.random() * 16) % 16 | 0;
        d = Math.floor(d / 16);
        return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
      });

    return guid;
  }

Затем используйте его для создания имени корзины:

var bucketKey = "test-" + guid()
person Philippe    schedule 13.11.2017

Кажется, что ваш ключ корзины дублируется, или ваш идентификатор клиента и секрет клиента содержат недопустимые символы. Проверьте эти параметры в своем приложении. И имя Ковша, т.е. ключ ведра должен быть глобальным уникальным. Если имя, которое вы передали сообщению /buckets, уже существует, вы также получите сообщение об ошибке. Я предлагаю вам использовать шаблон именования следующим образом:

Test + { Your Bucket Key }

Надеюсь, поможет.

person Eason Kang    schedule 13.11.2017
comment
хм, это дает мне Тест не определен - person ST80; 13.11.2017
comment
Что вам дало «Тест не определен»? Глобальные средства Forge OSS не позволяют иметь еще одну корзину с именем «Тест» на стороне сервера. Если вы не видите это ведро в своем приложении, возможно, оно принадлежит другим разработчикам. Вы можете проверить это через Get ‘/buckets/Test’. - person Eason Kang; 13.11.2017
comment
ОК? но это было бы очень-очень негибко, откуда мне знать, как другие называют свои ведра? Проверьте мой отредактированный вопрос выше. - person ST80; 13.11.2017
comment
Вы не можете сделать последний вызов, первый параметр — полезная нагрузка API. Он должен содержать ведроKey и policyKey, т.е. первый вызов API правильный, но значение в вашем BucketKey дублируется в Forge OSS. Вы должны изменить значение BucketKey в полезной нагрузке createBukey. - person Eason Kang; 13.11.2017