У вас есть два варианта.
- Параметризованный API поиска . Эта опция доступна из коробки с методом POST в качестве метода. API является RESTful-интерфейсом для текстовой поисковой системы Salesforce. Обычно текстовый поиск использует SOSL в качестве языка запросов. Параметризованный API поиска пропускает SOSL и дает вам более простую опцию для работы.
Если вы поместите следующее тело в /services/data/v48.0/parameterizedSearch
{
"q": "123456789",
"sobjects": [
{
"name": "Contact",
"where": "SSN__c = '123456789'"
}
],
"fields": ["id"]
}
, вы должны увидеть что-то вроде этого: ответ, при условии, что при поиске возвращается одна запись (идентификатор отредактирован):
{
"searchRecords" : [ {
"attributes" : {
"type" : "Contact",
"url" : "/services/data/v48.0/sobjects/Contact/003..."
},
"Id" : "003..."
} ]
}
Значение ключа q
в полезной нагрузке JSON должно совпадать со значением в where
ключ / пункт. Вы выполняете полнотекстовый поиск по номеру 123456789
по всем объектам и всем полям поискового индекса. Это может вернуть много записей ... но вы фильтруете поиск структурированным образом, чтобы гарантировать, что вы увидите только Contact
записей, где SSN__c = '123456789'
. Пока объекты + поля, которые вы пытаетесь получить, присутствуют в индексе, результаты, которые вы увидите с помощью поиска по параметрам в этом конкретном примере c, будут такими же, как и в запросе SOQL через /query
Пользовательский API REST (он же
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;}
}
}
POST до /services/apexrest/findcontactbyssn
с
{
"ssn": "12345678"
}
, и вы должны увидеть этот ответ:
{
"id": "003..."
}