-
Notifications
You must be signed in to change notification settings - Fork 460
CalloutRecipes
Demonstrates how to make an opinionated REST callout. This class utilizes the custom RestClient from the Shared Code group.
Group Integration Recipes
See RestClient
Inheritance
Inherited
TESTVISIBLE
The name of the Named Credential to use
protected namedCredentialName
String
Constructor accepting a named credential.
public CalloutRecipes(String namedCredential)
Name | Type | Description |
---|---|---|
namedCredential | String | name of the Named Credential to use |
Demonstrates how to make a raw HTTP request. This method
demonstrates how to use the Http, HttpRequest and HttpResponse objects to
construct a single get request. The other methods in this class
demonstrate the use of an intelligent abstraction layer - RestClient.cls
- to make sending Http Requests easier, easier to test, and less error prone.
public static String rawCallout()
String
Response body as a string
System.debug(CalloutRecipes.rawCallout());
Demonstrates a GET request to a second Salesforce org. A Get
request is used to retrieve data from a target endpoint, We will be using
the performRestCallout
method to make the callout. In this example, we
will be requesting a list of Accounts from our second org. We will pass
the endpoint our named credential, the url path to our integration-service
custom REST endpoint, a null body and the GET method. We will then
deserialize the JSON into a known object, in this case, a list of
Accounts.
public List<Account> httpGetCalloutToSecondOrg()
List<Account>
System.debug(CalloutRecipes.httpGetCalloutToSecondOrg());
Demonstrates a DELETE request to a second Salesforce org - A DELETE request is used to delete data from the target endpoint. In this example, we will be deleting a contact from another Salesforce org. We will store the parameters in the urlPath which can then be accessed through the .getParams() method in the org receiving the delete request.
public Integer httpDeleteCalloutToSecondOrg(Id contactId)
Name | Type | Description |
---|---|---|
contactId | Id | the Id of the contact that you would like to delete in |
the second org. |
Integer
Id contactId = [SELECT Id FROM Contact LIMIT 1].id;
System.debug(CalloutRecipes.httpDeleteCalloutToSecondOrg(contactId));
Demonstrates a POST request to a second Salesforce org a POST request is used to send data to a target endpoint and insert it. In this example, we will be sending a list of contact records to a second Salesforce org. We will serilaize the list and POST it in body of the callout.
public Integer httpPostCalloutToSecondOrg(List<Contact> contactRecords)
Name | Type | Description |
---|---|---|
contactRecords | List<Contact> | a list of contact records to be inserted in the |
second salesforce org |
Integer
List<Contact> contacts = [SELECT id, firstName, lastName FROM Contact LIMIT 5];
System.debug(CalloutRecipes.httpPostCalloutToSecondOrg(contacts));
Demonstrates a PUT request to a second Salesforce org a PUT request is used to send data to a target endpoint and upsert it. In this example, we will be sending a list of contact records to a second org.
public Integer httpPutCalloutToSecondOrg(List<Contact> contactRecords)
Name | Type | Description |
---|---|---|
contactRecords | List<Contact> | a list of contact records to be upsert in the |
second salesforce org |
Integer
List<Contact> contacts = [SELECT id, firstName, lastName FROM Contact LIMIT 5];
System.debug(CalloutRecipes.httpPutCalloutToSecondOrg(contacts));
Demonstrates a PATCH request to a second Salesforce org a PATCH request is used to send data to a target endpoint and update already existing data. In this example, we will be sending a list of Account records to a second salesforce org for updating.
public Integer httpPatchCalloutToSecondOrg(List<Account> accountRecords)
Name | Type | Description |
---|---|---|
accountRecords | List<Account> | a list of account records to be updated in the |
second salesforce org |
Integer
The status of the callout
List<Contact> contacts = [SELECT id, firstName, lastName FROM Contact LIMIT 5];
System.debug(CalloutRecipes.httpPatchCalloutToSecondOrg(contacts));
Now that we have demonstrated how to callout to an endpoint, lets take a look at what else we can do with the response. When calling out to an external endpoint, the data may not always be in a format that can be directly deserialised into a Salesforce Object. If your callout returns untyped JSON, you can deserialize this into a Map<String, Object> by using a deserializeUntyped method to convert the string.
public Map<String,Object> httpCalloutWithUntypedResponse()
Map<String,Object>
System.debug(CalloutRecipes.httpCalloutWithUntypedResponse());
As seen in the httpCalloutWithUntypedResponse method, we don't always get a perfect datastructure back from our callout. In this case, we have received and account and it's contacts that need to be inserted into Salesforce. Check out the Test class for an example of an untyped data structure.
public void insertAccountAndContactsFromUntypedResponse(String untypedResponse)
Name | Type | Description |
---|---|---|
untypedResponse | String | the untyped JSON response that we received from |
our previous callout |
void
CalloutRecipes.insertAccountAndContactsFromUntypedResponse(CalloutRecipes_Tests.goodUntypedJSON)
Inherited
TESTVISIBLE
SUPPRESSWARNINGS
Omnibus callout method. This is the primary method for making a REST callout. Most of the other methods in this class serve as convient, syntactic sugar on this method.
protected HttpResponse makeApiCall(HttpVerb method, String path, String query, String body, Map<String,String> headers)
Name | Type | Description |
---|---|---|
method | HttpVerb | Enum HTTP verb to use. i.e. GET |
path | String | patch component of the callout url i.e. /services/data/v39.0/SObjects
|
query | String | Query portion of the URL i.e. ?q=SELECT Id FROM Account
|
body | String | JSON string representing the body of the callout in post/patch situations |
headers | Map<String,String> | A map<String,String> of headers to use while making this callout |
HttpResponse
Inherited
TESTVISIBLE
SUPPRESSWARNINGS
Makes an HTTP Callout to an api resource. Convienence method that assumes the Default Headers.
protected HttpResponse makeApiCall(HttpVerb method, String path, String query, String body)
Name | Type | Description |
---|---|---|
method | HttpVerb | HTTPVerb to use. See the enum above. |
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
body | String | Body to send with this call. |
HttpResponse
Inherited
TESTVISIBLE
convenience version of makeApiCall without body param. Invokes omnibus version above, with blank body param and default headers.
protected HttpResponse makeApiCall(HttpVerb method, String path, String query)
Name | Type | Description |
---|---|---|
method | HttpVerb | HTTPVerb to use. See the enum above. |
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
HttpResponse
Inherited
TESTVISIBLE
convenience version of makeApiCall without body or query params. Invokes omnibus version above, with blank body and query params
protected HttpResponse makeApiCall(HttpVerb method, String path)
Name | Type | Description |
---|---|---|
method | HttpVerb | HTTPVerb to use. See the enum above. |
path | String | Http path component of the URL. ie: /path/to/resource
|
HttpResponse
Inherited
TESTVISIBLE
convenience method for a GET Call that only requires a path
protected HttpResponse get(String path)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
HttpResponse
Inherited
TESTVISIBLE
convenience method for a GET Call that only requires a path and query
protected HttpResponse get(String path, String query)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
HttpResponse
Inherited
TESTVISIBLE
convenience method for deleteing a resource based only on path
protected HttpResponse del(String path)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
HttpResponse
Inherited
TESTVISIBLE
convenience method for a Delete Call that only requires a path and query
protected HttpResponse del(String path, String query)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
HttpResponse
Inherited
TESTVISIBLE
convenience method for a POST Call that only requires a path and body
protected HttpResponse post(String path, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
convenience method for a POST Call that only requires a path, query and body
protected HttpResponse post(String path, String query, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
convenience method for a PUT Call that only requires a path and body
protected HttpResponse put(String path, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
convenience method for a PUT Call that only requires a path, query and body
protected HttpResponse put(String path, String query, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
convenience method for a PATCH Call that only requires a path, query and body
protected HttpResponse patch(String path, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
convenience method for a PATCH Call that only requires a path, query and body
protected HttpResponse patch(String path, String query, String body)
Name | Type | Description |
---|---|---|
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
body | String | JSON string to post |
HttpResponse
Inherited
TESTVISIBLE
Ensures that the inputted string ends in a /
makes callouts more robust.
protected String ensureStringEndsInSlash(String resource)
Name | Type | Description |
---|---|---|
resource | String | string to ensure ends in /
|
String
inputted string with ,[object Object], if it didn't already end in one.
Inherited
SUPPRESSWARNINGS
A static wrapper for the main makeApiCall method
public static HttpResponse makeApiCall(String namedCredential, HttpVerb method, String path, String query, String body, Map<String,String> headers)
Name | Type | Description |
---|---|---|
namedCredential | String | The named credential to use |
method | HttpVerb | HTTPVerb enum value. See Enum above |
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
body | String | JSON string to post |
headers | Map<String,String> | Map<String,String> representing outgoing Request |
headers |
HttpResponse
System.Debug(RestClient.makeApiCall('GoogleBooksAPI',
RestClient.HttpVerb.GET,
'volumes',
'q=salesforce',
'',
new Map<String,String>()));
Inherited
SUPPRESSWARNINGS
A static wrapper for the main makeApiCall method that assumes default headers.
public static HttpResponse makeApiCall(String namedCredential, HttpVerb method, String path, String query)
Name | Type | Description |
---|---|---|
namedCredential | String | The named credential to use |
method | HttpVerb | HTTPVerb enum value. See Enum above |
path | String | Http path component of the URL. ie: /path/to/resource
|
query | String | Query component of the URL ie: after ?foo=bar
|
HttpResponse
System.Debug(RestClient.makeApiCall('GoogleBooksAPI',
RestClient.HttpVerb.GET,
'volumes',
'q=salesforce'));
Inherited
A static wrapper for the main makeApiCall method where you only need the path
public static HttpResponse makeApiCall(String namedCredential, HttpVerb method, String path)
Name | Type | Description |
---|---|---|
namedCredential | String | The named credential to use |
method | HttpVerb | HTTPVerb enum value. See Enum above |
path | String | Http path component of the URL. ie: /path/to/resource
|
HttpResponse
System.Debug(RestClient.makeApiCall('GoogleBooksAPI',
RestClient.HttpVerb.GET,
'volumes'));
Internal custom exception class