REST API provides a powerful, convenient, and simple Web
services API for interacting with Force.com. Its advantages include ease of
integration and development, and it’s an excellent choice of technology for use
with mobile applications and Web 2.0 projects.
A REST resource is an abstraction of a piece of information,
such as a single data record, a collection of records, or even dynamic
real-time information. Each resource in the Force.com REST API is identified by
a named URI, and is accessed using standard HTTP methods (HEAD, GET, POST,
PATCH, DELETE). The Force.com REST API is based on the usage of resources,
their URIs, and the links between them. You use a resource to interact with
your Salesforce or Force.com organization. For example, you can:
- Retrieve summary information about the API versions available to you.
- Obtain detailed information about a Salesforce object such as an Account or a custom object.
- Obtain detailed information about Force.com objects, such as User or a custom object.
- Perform a query or search.
- Update or delete records.
In this
blog, I will be explaining how to interact with Salesforce using REST API. I will be creating a VF page named as “RESTAPIPlayground”.
On this page you can specify different parameters which is required to send
HTTPRequest like Access token, end point URL (URI), HTTP method etc. VF page
will display the response from Salesforce and will also display the Apex code
to send HTTPRequest.
Here I
assume that you are aware of how to generate access token from salesforce using
oAuth2.0. If you want to learn this first then refer to my earlier blog:
Once you
have access token of salesforce with which you want to interact then you can
use this playground (VF Page) to play with different options available under
REST API.
Create a Apex class "RESTAPIPlaygroundController" and VF Page "RESTAPIPlayground". Below is code for Apex Class and VF page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RESTAPIPlaygroundController { | |
public String strSelectedAppId{get;set;} | |
public String strURI{get;set;} | |
public String strSelectedMethod{get;set;} | |
public String strSelectedContentType{get;set;} //JSON or XML | |
public String strRequestBody{get;set;} | |
public String strResponse{get;set;} | |
public String strApexCode{get;set;} | |
public String strAccessToken{get;set;} | |
public RESTAPIPlaygroundController(){ | |
strSelectedMethod='GET'; | |
strSelectedContentType='.xml'; | |
} | |
public list<selectoption> getAvailableHTTPmethods(){ | |
list<selectoption> options=new list<selectoption>(); | |
options.add(new selectoption('GET','GET')); | |
options.add(new selectoption('PATCH','PATCH')); | |
options.add(new selectoption('POST','POST')); | |
//options.add(new selectoption('PUT','PUT')); | |
options.add(new selectoption('DELETE','DELETE')); | |
return options; | |
} | |
public List<selectoption> getContentType(){ | |
List<selectoption> options=new List<selectoption>(); | |
options.add(new selectoption('.json','JSON')); | |
options.add(new selectoption('.xml','XML')); | |
return options; | |
} | |
public pageReference sendRequest(){ | |
String errmsg=validateInputparametrs(); | |
system.debug('*********errmsg'+errmsg); | |
if(errmsg!=null && errmsg!=''){ | |
ApexPages.addMessage(new apexpages.message(ApexPages.severity.Error,errmsg)); | |
}else{ | |
HttpRequest req=createHTTPRequest(); | |
HTTPResponse res=sendRequest(req); | |
strResponse=res+'\n'; | |
strResponse=res.getBody(); | |
} | |
return null; | |
} | |
public HttpRequest createHTTPRequest(){ | |
HttpRequest req = new HttpRequest(); | |
strApexCode='HttpRequest req = new HttpRequest();\n'; | |
String endpointURL; | |
if(strAccessToken!=null && strAccessToken!=''){ | |
//setting end point URL | |
if(strURI!=null && strURI!=''){ | |
if(strURI.endswith('/')){ | |
strURI=strURI.substring(0,strURI.length()-2); | |
} | |
endpointURL=strURI; | |
system.debug('************endpointURL:'+endpointURL); | |
if(strSelectedMethod.equalsignorecase('PATCH')){ | |
endpointURL+='?_HttpMethod=PATCH'; | |
} | |
req.setEndpoint(endpointURL); | |
strApexCode+='req.setEndpoint('+endpointURL+');\n'; | |
} | |
//setting request headers | |
if(strSelectedContentType.equalsignorecase('.xml')){ | |
req.setHeader('Content-Type', 'application/xml; charset=utf-8'); | |
strApexCode+='req.setHeader(\'Content-Type\', \'application/xml; charset=utf-8\');\n'; | |
req.setHeader('Accept', 'application/xml'); | |
strApexCode+='req.setHeader(\'Accept\', \'application/xml\');\n'; | |
}else{ | |
req.setHeader('Content-Type', 'application/json; charset=utf-8'); | |
strApexCode+='req.setHeader(\'Content-Type\', \'application/json; charset=utf-8\');\n'; | |
} | |
req.setHeader('Authorization','Authorization: Bearer '+strAccessToken); | |
strApexCode+='req.setHeader(\'Authorization\',\'Authorization: Bearer '+strAccessToken+');\n'; | |
//setting HTTP method | |
if(strSelectedMethod!=null && strSelectedMethod!=''){ | |
if(strSelectedMethod.equalsignorecase('GET')){ | |
req.setMethod('GET'); | |
strApexCode+='req.setMethod(\'GET\');\n'; | |
}else if(strSelectedMethod.equalsignorecase('POST') || strSelectedMethod.equalsignorecase('DELETE') || strSelectedMethod.equalsignorecase('PUT')){ | |
req.setMethod(strSelectedMethod); | |
strApexCode+='req.setMethod('+strSelectedMethod+');\n'; | |
string body=strRequestBody; | |
req.setBody(body); | |
strApexCode+='req.setBody('+body+');\n'; | |
req.setHeader('Content-Length', '1024'); | |
strApexCode+='req.setHeader(\'Content-Length\',\'1024\');\n'; | |
req.setTimeout(12000); | |
strApexCode+='req.setTimeout(1200);\n'; | |
} | |
else if(strSelectedMethod.equalsignorecase('PATCH')){ | |
req.setMethod('POST'); | |
strApexCode+='req.setMethod(\'POST\');\n'; | |
string body=strRequestBody; | |
req.setBody(body); | |
strApexCode+='req.setBody('+body+');\n'; | |
req.setHeader('Content-Length', '1024'); | |
strApexCode+='req.setHeader(\'Content-Length\',\'1024\');\n'; | |
req.setTimeout(12000); | |
strApexCode+='req.setTimeout(1200);\n'; | |
} | |
} | |
} | |
system.debug('***************strApexCode:'+strApexCode); | |
system.debug('***************HttpRequest req:'+req); | |
return req; | |
} | |
public HTTPResponse sendRequest(HttpRequest Req){ | |
Http http = new Http(); | |
strApexCode+='Http http = new Http();\n'; | |
HTTPResponse res = http.send(req); | |
strApexCode+='HTTPResponse res = http.send(req);\n'; | |
System.debug('****************res.getStatusCode();'+res.getStatusCode()); | |
return res; | |
} | |
public string validateInputparametrs(){ | |
String errmsg; | |
if(strAccessToken==null || strAccessToken==''){ | |
errmsg='Please specify Access Token.\n'; | |
}if(strURI==null || strURI==''){ | |
errmsg+=' Please specify REST API service URI (Endpoint URL).\n'; | |
}if(strSelectedMethod==null || strSelectedMethod==''){ | |
errmsg+=' Please specify Http method.\n'; | |
} | |
system.debug('*********errmsg'+errmsg); | |
return errmsg; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page controller="RESTAPIPlaygroundController" sidebar="false"> | |
<style> | |
.table .tr .td{ | |
width:100%; | |
} | |
</style> | |
<apex:form > | |
<apex:pagemessages /> | |
<apex:pageblock mode="maindetail" title="REST API TUTORIAL"> | |
<table width="100%"> | |
<tr width="100%"> | |
<td width="50%"> | |
<table> | |
<tr><th>Request Parameters</th> </tr> | |
<tr><td><apex:outputlabel value="Enter Access token" /></td></tr> | |
<tr><td><apex:inputtextarea value="{!strAccessToken}" id="AcessToken" style="width:100%;"/> </td></tr> | |
<tr><td><apex:outputlabel value="REST API service URI" /></td></tr> | |
<tr><td><apex:inputtextarea value="{!strURI}" id="URI" style="width:100%;"/> </td></tr> | |
<tr><td><apex:outputlabel value="Choose an HTTP method to perform on the REST API service URI" /></td></tr> | |
<tr> | |
<td> | |
<apex:selectradio value="{!strSelectedMethod}" id="sm"> | |
<apex:selectoptions value="{!AvailableHTTPmethods}" /> | |
</apex:selectradio> | |
</td> | |
</tr> | |
<tr><td><apex:outputlabel value="Content Type" /></td></tr> | |
<tr> | |
<td> | |
<apex:selectlist value="{!strSelectedContentType}" size="1" id="cont"> | |
<apex:selectoptions value="{!ContentType}"/> | |
</apex:selectlist> | |
</td> | |
</tr> | |
<tr><td><apex:outputlabel value="Request Body" /></td></tr> | |
<tr><td><apex:inputtextarea value="{!strRequestBody}" id="reqbody" style="width:100%;"/> </td> </tr> | |
</table> | |
</td> | |
<td width="50%"> | |
<table> | |
<tr><th>Apex Code</th></tr> | |
<tr><td><apex:inputtextarea value="{!strApexCode}" id="ac" style="width:500px;height:300px;"/></td></tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
<br/> | |
<apex:commandbutton value="Send request" action="{!sendRequest}"/> | |
<br/> | |
<!-- Response section --> | |
<table width="100%"> | |
<tr> | |
<th>HTTP Response</th> | |
</tr> | |
<tr> | |
<td><apex:inputtextarea value="{!strResponse}" id="res" style="width:100%;height:400px;"/></td> | |
</tr> | |
</table> | |
</apex:pageblock> | |
</apex:form> | |
</apex:page> |
Below is snapshot of REST API Playground. You can specify the Access_Token, REST API service URI (endpoint URL), HTTP method and content type (json or xml), request body (in case of patch and post method). Once you click on send request, system will display the HTTP response.
Note: Add the REST API service URI (end point URL) to remote site settings before sending HTTPRequest.
Sunil Can u please send me same like How can i get the SOAP Response .Please send me code If u possible bcz of i am new in webservices. nagarajuu.c@gmail.com
ReplyDeleteThanks
Raj
In VF page, there is section which display response when you send HTTP request. Apex code is generated for request and response on right side of VF page. Please refer that.
ReplyDeleteAlredy i checked above code is working fine but my req is getting SOAP response instead of http responseis it's possible ,in case its possible plz send me sample code plz
Delete
ReplyDeleteHai Author, Very Good informative blog post,
Thanks
It is very useful information about salesforce . This is the place for learner and glad to be here in this blog Thank you
ReplyDeletesalesforce Training in Hyderabad
salesforce course in Hyderabad
Enroll
I feel happy about and I love learning more about this topic...
ReplyDeleteBest Salesforce Training in Hyderabad
Salesforce Online Training in Hyderabad
Shop the latest collection of gym wear for men at Nayza. Choose from a wide range of gym wear, including gym clothes and men's fitness apparel, to stay stylish and comfortable during your workouts.
ReplyDeleteAhmad Shahjahan offers stylish and reasonably priced men shalwar kameez Pakistan online. Check out our collection to discover the latest trends and fashions.
ReplyDelete