你有两个选择。
-
Parameterized Search API。此选项开箱即用,使用 POST 作为方法。 API 是 Salesforce 的基于文本的搜索引擎的 RESTful 接口。通常,基于文本的搜索使用 SOSL 作为查询语言。参数化搜索 API 会跳过 SOSL,并为您提供更轻松的使用选项。
如果您将以下正文发布到/services/data/v48.0/parameterizedSearch
{
"q": "123456789",
"sobjects": [
{
"name": "Contact",
"where": "SSN__c = '123456789'"
}
],
"fields": ["id"]
}
您应该看到类似这样的响应,假设搜索返回单个记录(ID 已编辑):
{
"searchRecords" : [ {
"attributes" : {
"type" : "Contact",
"url" : "/services/data/v48.0/sobjects/Contact/003..."
},
"Id" : "003..."
} ]
}
JSON 负载中 q 键的值必须与 where 键/子句中的值相同。您正在对搜索索引中的所有对象和所有字段对123456789 进行全文搜索。这可能会返回许多记录..但是您正在以结构化的方式过滤搜索,以保证您只会看到Contact 的记录,其中SSN__c = '123456789'。只要您尝试检索的对象 + 字段存在于索引中,您将在此特定示例中通过参数化搜索看到的结果将与通过 /query 的 SOQL 查询的结果相同
- 自定义 REST API(又名 Apex REST / Apex 网络服务)。对于像您这样的情况,这是一个典型的实施选项。您可以通过 POST 发送任何有效负载,然后根据需要进行处理。
Apex 类:
@RestResource(urlMapping='/findcontactbyssn')
global class ContactResource {
@HttpPost
global static void findContactBySSN() {
SearchRequest input = (SearchRequest)JSON.deserialize(RestContext.request.requestBody.toString(),SearchRequest.class);
Contact c = [SELECT Id FROM Contact WHERE SSN__c = :input.ssn];
SearchResponse output = new SearchResponse();
output.id = c.id;
RestContext.response.responseBody = Blob.valueOf(JSON.serialize(output));
RestContext.response.statusCode = 200;
}
class SearchRequest {
public String ssn {get;set;}
}
class SearchResponse {
public String id {get;set;}
}
}
发布到/services/apexrest/findcontactbyssn
{
"ssn": "12345678"
}
您应该会看到以下响应:
{
"id": "003..."
}