BIM 360 Glue API

真正开发应用之前,使用工具来试调用RESTful API是必由之路,它可以帮助我们更加清晰直观的理解我们要使用的API。

下面我们用一个简单的例子来看看如何用cURL和PostMan(开发工具介绍)调用Glue API实现登录和查询工程的功能。

调用API登录

初次登录的时候,需要验证API秘钥(不清楚什么是API秘钥的可以看这里),验证成功之后服务器会返回一个auth_token,后续的操作可以不用用户名密码,而是用auth_token作代替。

登录命令是向https://b4.autodesk.com/api/security/v1/login.{format}地址发送POST请求,这里{format}指定了返回数据的格式,可以是json或xml两种,POST内容如下(还有其他没有列出的参数为可选):

参数 含义
login_name 登录名,即Autodsek Id
password 登录密码
company_id 公司ID
api_key API key
api_secret API secret
timestamp 时间戳,是一个用秒数表示的当前时间
sig 一个md5码, 由api_key + api_secret + timestamp计算得出

上面的参数中最后两个,即timestamp和sig,一般需要用程序算出,几乎每个请求都要求这两个参数,而且它是随着时间变化而变化的。

它们的获取请参见我们后面的小节[获取timestamp和sig]。

这里我们使用json格式,所以,需要请求的url地址为:https://b4.autodesk.com/api/security/v1/login.json

方法是:POST

内容如下:

login_name=Aaron.Lu@autodesk.com
&company_id=adn
&password=********
&api_key=fe251558432bd3da0a70326ed169****
&api_secret=70aadb2838cac9a739da11296d7f****
&timestamp=1428647796
&sig=6ec77c0448fcb16da9c1f03220a96ceb

使用cURL命令

在命令行中输入:

curl --data "login_name=Aaron.Lu@autodesk.com&company_id=adn&password=********&api_key=fe251558432bd3da0a70326ed169****&api_secret=70aadb2838cac9a739da11296d7f****&timstamp=1428647796&sig=6ec77c0448fcb16da9c1f03220a96ceb" https://b4.autodesk.com/api/security/v1/login.json

--data 指明要发送的数据,同时表明需要发送POST请求。

返回结果如下,是一段json格式的数据:

{"auth_token":"35730ba86d48470593c1e63090610aa5","user_id":"****0b93-e919-****-9695-8b3733fa****","account_id":"****a18f-****-4b8a-****-8d762595****","account_hostname":"adn"}

注意:记下auto_token,后面的请求都要用到它。

使用PostMan

选择方法为POST,在form-data中填上各个字段,点击”Send”,就可以在下方的Body栏看到同样的结果:

调用API获取项目列表

获取项目列表的url地址是https://b4.autodesk.com/api/project/v1/list.{format}

方法:GET

参数如下:

参数 含义
company_id 公司ID
api_key API key
timestamp 时间戳,是一个用秒钟表示的当前时间
sig 一个md5码, 由api_key + api_secret + timestamp计算得出
auth_token 一个hash值,从登陆之后返回的一个字段中获取

可以看到api_secret, login_name, password字段已经不需要了,取而代之的是auth_token字段。

因为使用GET方法,参数都需要包含在url地址里,所以最终要访问的url地址就是:

https://b4.autodesk.com/api/project/v1/list.json?company_id=adn&api_key=fe251558432bd3da0a70326ed169****&timestamp=1428650893&sig=8d22b59569335394d7b219aae91990a7&auth_token=34dd71d838674c86a02da2fe329db24d

使用cURL

在命令行中输入:

curl https://b4.autodesk.com/api/project/v1/list.json?company_id=adn&api_key=fe251558432bd3da0a70326ed169****&timestamp=1428650893&sig=8d22b59569335394d7b219aae91990a7&auth_token=34dd71d838674c86a02da2fe329db24d

返回结果(用onlinejsonviewer美化之后):

{"project_list": [{"recent_model_info": [],"project_id": "1e7e5e8d-fea8-49cd-8e5b-76058f0ee3b6","project_name": "AL+Sample+Project","company_id": "adn","created_date": "2015-03-19 03:26:51","modify_date": "2015-04-01 07:15:15","cmic_company_code": "","cmic_project_code": "","cw_project_code": "","thumbnail_modified_date": "2015-03-19 04:41:45","has_views": false,"has_markups": false,"has_clashes": false,"has_points": false,"total_member_count": 0,"total_project_admin_count": 0,"total_views_count": 0,"total_markups_count": 0,"last_activity_date": "2015-04-01 07:15:15","permissions": [],"navisworks_version": "Nwd2014"}],"page": 1,"page_size": 1,"total_result_size": 1,"more_pages": 0
}

使用PostMan

选择方法为GET,输入最终url地址,点击”Send”,结果就显示在界面下方。

程序计算timestamp和sig

timestamp

Timestamp是一个整形数字,表示的是当前时间(格林威治时间)相对于1970年1月1日0点所经过的时间的秒数值,叫做UNIXEpoch Time。伪代码可以表示如下:

秒数(当前时间-1970年1月1日0点)

下面是各平台获取该秒数的代码:

Powershell(Windows7自带命令行工具,比DOS要高级一点,在开始菜单输入PowerShell就能看到,由于我们用cURL命令行调用API,所以这里介绍命令行的方式获取我们需要的数据)

$oriDate=Get-Date -Date "01/01/1970"
$nowDate=(Get-Date).ToUniversalTime()
$timestamp=[int](New-TimeSpan -Start $oriDate -End $nowDate).TotalSeconds

C#

TimeSpan tSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1));
int timestamp = (int)tSpan.TotalSeconds;

Node.js/Javascript

var timestamp = Math.floor((new Date).getTime()/1000);

Java

long timestamp = System.currentTimeMillis() / 1000L;

Ruby

timestamp = Time.now.getutc.to_i.to_s

sig

sig是md5码,GlueAPI要求的md5码是由api_key、auth_token和timestamp组成的字符串计算出来的md5码,另外必须是小写,且不带减号(-),其伪代码如下:

MD5 (api_key+api_secret+timestamp)

下面是各平台获取某个字符串MD5的代码:

Powershell

$identityString = $api_key + $api_secret + $timestamp
# compute hash
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$utf8 = new-object -TypeName System.Text.UTF8Encoding
$signature = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($identityString))).Replace("-","").ToLower()

C#

// using System.Security.Cryptography;
var identityString = api_key + api_secret + timestamp;public string ComputeMD5Hash(string identityString)
{// step 1, calculate MD5 hash from identityStringMD5 md5 = System.Security.Cryptography.MD5.Create();byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(identityString);byte[] hash = md5.ComputeHash(inputBytes);// step 2, convert byte array to hex stringStringBuilder sb = new StringBuilder();for (int i = 0; i < hash.Length; i++){sb.Append(hash[i].ToString("x2"));}return sb.ToString();
}

Node.js/Javascript

var crypto = require('crypto');
var hash = crypto.createHash('md5').update(identityString).digest("hex");

Java

public String computeMD5Hash(String identityString) {java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");byte[] array = md.digest(identityString.getBytes());StringBuffer sb = new StringBuffer();for (int i = 0; i < array.length; ++i) {sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));}
return sb.toString();
}

Ruby

require 'digest/md5'
Digest::MD5.hexdigest(api_key.api_secret.timestamp)

问题处理

如果碰到下面的情况可能的原因是使用的HTTP方法不对,例如,需要使用GET的时候,使用了POST或其他方法。

<body><div id="content"><p class="heading1">Service</p><p>Method not allowed.</p></div>
</body>

其他参考资料

BIM 360 API开发入门

BIM 360 Glue API: 用cURL或PostMan实现登陆和获取项目列表的功能相关推荐

  1. Autodesk BIM 360 Glue API 入门视频课程

    height="498" width="510" src="http://player.youku.com/embed/XOTU0NTg3Mzc2&q ...

  2. BIM 360 Docs API在操作欧洲数据中心内容的一些调整

    如果您的项目是操作BIM 360 Docs的数据,而且是在欧洲数据中心的项目,注意一个重大调整:Model Derivative API (数据提取和转换服务)相关的API,需要带上regions/e ...

  3. BIM 360 二次开发入门

    Autodesk BIM 360 我们或多或少听过或者接触过Autodesk BIM 360,但可能还是有一个疑问,就是,Autodesk BIM 360到底是什么? 如果用一句话来讲的话,BIM36 ...

  4. Web API 持续集成:PostMan+Newman+Jenkins(图文讲解)

    2019独角兽企业重金招聘Python工程师标准>>> 本文由葡萄城技术团队于OSChina原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务, ...

  5. Fusion 360 以及 API 快速了解

    我在其它几篇文章已经碎碎叨叨的提及了Fusion 360.我们也有相关的材料,帮助,博客介绍等,但都是英文的.而且,可能东西多了反倒可能让人觉得犯晕. 所以,我想写两三点给需要了解Fusion 360 ...

  6. 360新闻api,通过关键字检索最新新闻动态

    360新闻api,通过关键字检索最新新闻动态,包括新闻标题.新闻摘要内容.图片宽度.完整标题.发布时间.新闻来源.图片链接.新闻链接.发布完整时间等等. 接口名称:360新闻api 接口平台:api接 ...

  7. 前端学习(1857)vue之电商管理系统电商系统之配置api接口服务器并用postman调试接口

    # 1. 电商管理后台 API 接口文档## 1.1. API V1 接口说明- 接口基准地址:`http://127.0.0.1:8888/api/private/v1/` - 服务端已开启 COR ...

  8. Postman接口测试工具学习笔记(二)Postman进阶实践:获取天气预报实例

    Postman接口测试工具学习笔记(一) 入门及基本概念 https://blog.csdn.net/sevensolo/article/details/87208546 Postman进阶实践:获取 ...

  9. 使用B站API:http://api.bilibili.com/x/space/upstat?mid=2026561407获取播放量、点赞量的返回报文中data数据缺失问题排查(已解决)

    背景 想要用ESP32获取一些b站上的数据粉丝量播放量等数据 获取粉丝数的API:http://api.bilibili.com/x/relation/stat?vmid=2026561407 获取播 ...

最新文章

  1. php扩展的应用,《PHP扩展开发及内核应用》
  2. Win64 驱动内核编程-32.枚举与删除注册表回调
  3. 144显示器只有60_HKC IG27电竞显示器体验:27英寸+IPS+144Hz,千元平民价值不值?...
  4. 【洛谷P1538】迎春舞会之数字舞蹈
  5. java继承的举例_java继承实例
  6. Java异常处理原则与技巧总结
  7. 发现凌晨醒来,可以写出平时写不出来的代码
  8. CentOS 7 安装Docker
  9. 2021年中国电动气动控制器市场趋势报告、技术动态创新及2027年市场预测
  10. CentOS/RHEL 7中的firewall控制
  11. Delphi 中的 procedure of object
  12. 创建文本节点createTextNode
  13. QTTabBar 汉化 给资源管理器添加标签、文件批量重命名依据扩展名选中等功能
  14. 2017年的知识清单
  15. 训练集和测试集的划分
  16. Flink Window TOPN: The window can only be ordered in ASCENDING mode.
  17. 华为机试 - 数字涂色
  18. Android Webview完美支持播放各种视频。(解决无法播放优酷视频的问题以及周末无法播放优酷视频的问题)
  19. PICO《轻世界》体验:随心畅玩,洒脱创作,潜力无限
  20. @staticmethod静态方法

热门文章

  1. 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)
  2. 栈的抽象数据类型定义
  3. eclipse将java项目转换成maven项目
  4. Selenium学习之显式等待中的EC模块详解
  5. 基于翔云OCR云平台的人脸识别(2)
  6. 详解Socket接口
  7. HTML学习——标签分类
  8. LeetCode题目——二叉树篇
  9. SQL注入——布尔盲注,时间盲注,宽字节注入
  10. SAP: SD - 07 Billing