我目前正在实施 suitecrm,我的客户需要以编程方式撤回属于特定潜在客户列表的所有潜在客户。
在 suitecrm 中获取潜在客户列表很容易
获取:/module/api/v8/Prospects
获取潜在客户名单也很简单
获取:/module/api/v8/Prospect_Lists
但是,在 JSON API Spec 中,关系是通过调用 API 来为您提供相关对象的列表而存在的,例如 获取:/Api/V8/module/ProspectLists/a8f704d4-c25b-53e6-a7fc-6005b93835cd/relationships/prospects 返回与 Prospect_List 相关的潜在客户 ID 数组。 响应示例:
{
{
"data": [
{
"type": "Prospect",
"id": "9c3d7edf-9679-eff3-9ff0-60197fe7af68",
"links": {
"self": "V8/module/Prospect/9c3d7edf-9679-eff3-9ff0-60197fe7af68"
}
},
{
"type": "Prospect",
"id": "d4ab2b49-c95d-9a64-4770-601c2b658adf",
"links": {
"self": "V8/module/Prospect/d4ab2b49-c95d-9a64-4770-601c2b658adf"
}
},
]
}
我的问题是,使用JSON Api(特别是suitecrm)是否可以一次性拉回所有相关记录(完整记录,而不仅仅是ID),而不是循环遍历数组并一一获取请求?
我确实使用过滤器参数进行了测试,但它似乎不起作用,并且由于返回数据的可变长度性质而让我害怕。
您的问题包含两部分:
让我一一解答吧。
JSON:API 规范定义了关系链接:
它们可能包含在
links
关系对象的成员中。 self
键提供关系链接。 related
键提供相关资源链接。
关系链接被定义为“关系本身的链接。此链接允许客户端直接操作关系。[...]成功获取后,此链接将返回相关资源的链接作为其主要数据。” (来源)
定义中提到的资源链接是相关资源(has-one关系)或资源(has-many关系)的Resource Identifier Objects。资源标识符对象是特定资源的
type
和 id
的唯一组合,用于标识该资源。
A 相关资源链接“提供对关系中链接的资源对象的访问。获取时,相关资源对象将作为响应的主要数据返回。”
总结
GET
操作:
type
和id
。是否为特定关系提供关系链接和相关资源链接,仅其中之一或不提供,取决于实现。
我自己没有使用 SuiteCRM API 的经验。提供的所有信息均基于公共文档 Suite CRM API V8 以及您问题中提供的信息。
SuiteCRM 提供了获取单个资源的请求响应示例:
{
"data": {
"type": "Account",
"id": "11a71596-83e7-624d-c792-5ab9006dd493",
"attributes": {
"name": "White Cross Co",
"account_type": "Customer"
},
"relationships": {
"AOS_Contracts": {
"links": {
"related": "/V8/module/Accounts/11a71596-83e7-624d-c792-5ab9006dd493/relationships/aos_contracts"
}
}
}
}
}
ID 为
Account
的 11a71596-83e7-624d-c792-5ab9006dd493
的资源对象包含 AOS_Contracts
关系的相关资源链接。是/V8/module/Accounts/11a71596-83e7-624d-c792-5ab9006dd493/relationships/aos_contracts
。
您所包含的回复不是我所期望的相关资源链接的回复。它不包括
Prospect
资源的任何字段。它看起来像带有附加自链接的资源标识符对象。
严格来说我不认为这是错误的。默认情况下,JSON:API 规范允许服务器在响应中仅包含所有字段的子集。该子集可能会有所不同,具体取决于端点。但这至少是非常罕见的。
在这种情况下,您应该能够使用“稀疏字段集”功能请求包含特定字段。我不知道SuiteCRM中Prospect
资源的字段。但假设它具有
name
属性,您可以请求包含它(并且仅包含它),并将这些查询参数添加到相关资源链接:?fields[Prospect]=name
。