这是我的第513篇原创文章,写于2024年10月26日。
以前我写过一篇文章:配置Postman通过OAuth 2 implicit grant获取D365数据 ,以前我这个文章参考的的官方原文使用的是Postman 这个工具,现在变成使用 Insomnia了,官方原文是:Use Insomnia with Dataverse Web API 。所以我今天来讲讲使用Insomnia来调用Dataverse的Web API。
首先请参考官方的 Install Insomnia 文档下载并安装好 Insomnia ,我这里安装的版本如下:
这是我安装后的欢迎界面:
我先讲这个软件的两个设置,打开菜单栏的Application > Preferences 菜单项。
如果Show variable source and value选项是默认选中的,我建议取消选中,这样可以看到你有些地方输入的是环境变量,放上去环境变量依然可以看到环境变量的值,而不是直接先是为环境变量的值,后者这种方法会让我误以为我输入的,而不是使用环境变量。如果 Autocomplete popup delay (ms)如果为0的话,我建议设置为300,避免到时候Autocomplete在某些电脑上显示不出来。
我先创建一个Project,我这里放在本地就好:
我们的配置会用到Insomnia的环境变量(Environment Variables),简单来说就是类似配置项,有优先级一说,具体优先级如下,我这篇文章会用到Base Environment和Sub Environment。
- Folder Environment (highest priority)
- Sub Environment
- Base Environment (lowest priority)
首先我在主页面点击 Environments旁边的加号按钮,创建一个名称为Base Environment的Base Environment。
这里要用JSON 的key-value形式,我这里设置如下,与官方文档稍有不同,考虑到了中国大陆版本的特殊性,key以 _cn 结尾的代表如果使用的是中国大陆版本的Power Platform需要使用的,我增加了有些设置,后面会用到。这里配置的是Base Environment,整个Project都可以使用,当然后面我会用Sub Environment覆盖部分值或者新增部分值。值得注意的是环境变量可以嵌套使用,{{ 和 }}之间便是嵌套了其他环境变量的值。
{
"resourceurl": "https://luoyong.crm.dynamics.com",
"resourceurl_cn": "https://luoyong.crm.dynamics.cn",
"version": "9.2",
"webapiurl": "{{ _.resourceurl }}/api/data/v{{ _.version }}/",
"webapiurl_cn": "{{ _.resourceurl_cn }}/api/data/v{{ _.version }}/",
"redirecturl": "https://localhost",
"clientid": "7cc5e50a-d1ab-4ebc-9c53-1ed491f623c1",
"tenantid": "499b3b50-942b-4cb5-9809-3e3a6e5824d9",
"clientsecret": "wCs8Q~Q0CllY2veirmuL7xX6fAeZ6cHGbPnumbah",
"bearertoken":"placeholder",
"authurl": "https://login.microsoftonline.com/{{ _.tenantid }}/oauth2/v2.0/authorize",
"authurl_cn": "https://login.partner.microsoftonline.cn/{{tenantid}}/oauth2/v2.0/authorize",
"implicitauthurl": "https://login.microsoftonline.com/{{ _.tenantid }}/oauth2/authorize?resource={{ _.resourceurl }}",
"implicitauthurl_cn": "https://login.partner.microsoftonline.cn/{{ _.tenantid }}/oauth2/authorize?resource={{ _.resourceurl_cn }}",
"tokenurl": "https://login.microsoftonline.com/{{ _.tenantid }}/oauth2/token",
"tokenurl_cn": "https://login.partner.microsoftonline.cn/{{ _.tenantid }}/oauth2/token",
"ODataVersion": "4.0",
"ODataMaxVersion": "4.0",
"globalclientid": "51f81489-12ee-4a9e-aaae-a2591f45987d"
}
然后我点击Base Environment旁边的加号,选择 Shared environment, 这是创建 Sub Environment ,相同的key的值会覆盖Base Environment的值,当然也可以新增环境变量的值。
默认名称是New Environment,我一般双击名称后改成合适的,比如我这个是用于开发环境的,我命名为Dev Environment,当然我还可以新增用于Sit环境的 Sit Environment,我这个环境变量的内容很简单,我就覆盖下Base Environment的 resourceurl的值,设置的值如下图:
然后一般我会为Microsoft Dataverse创建一个单独的Colection,点击Collections旁边的加号创建。
第一步先选好Base Environment,点击左边的Base Environment,选择我前面创建的Base Environment,并选择我前面创建的Dev Environment。
选择后的结果如下:
然后我一般会用文件夹folder来分类,点击Filter旁边的加号,再点击New folder这个选项。
比如我可能创建了如下的文件夹:
第一个我演示文件夹用OAuth 2.0的Client Credentials认证。我在这些配置中使用环境变量的值可以利用自动完成,输入 _. 稍微停顿下就会看到可用的环境变量,选择好就行。或者直接同时按住 Ctrl 键加上空格键(SPACE键) 也可以出来提示,选择合适的环境变量。
我这里配置了如下的值:
将鼠标放到环境变量上会告知用的是使用的是Sub Environment,它的值是什么,如下图:
点击右下角的Refresh Token 或者Fetch Token就可以获取到一个token。
为了方便后面的请求分类,我再建了一个文件夹CRUD,然后再在这个CRUD文件夹中建立一个HTTP Request,我命名为 RetrieveMultiple Request 。
这个Request的GET url和Params设置如下:
注意Auth保持默认即可。
Headers设置如下:
点击Send按钮就可以看到返回结果了:
点击Console可以看更多的信息如下:
第二种我演示使用OAuth 2.0的 Implicit 认证,使用的配置如下:
然后点击右下角的Fetch Token按钮就会弹回登录页面,认证通过后就会返回token,其余的请求和前面的OAuth 2.0的Client Credential是一样的。
值得注意的是,这个认证用的是一个全球环境都自动配置好的一个Client Id,值为 51f81489-12ee-4a9e-aaae-a2591f45987d ,如果你用于中国大陆的环境并不可用。所以最好自己创建一个App,记得这个App的Authentication 的 Access tokens属性要勾选,否则获取不了token。