REST API

REST API Integration from one org to another in salesforce

APEX

Just taking about live scenario, For now we have two ORG, ORG A and another ORG B.What we will doing today is we will try to fetch an account from ORG B and show that using the Visualforce page in ORG A.

Rest api is a simple and power webservice based on restful principles and it uses rest resource and HTTP methods to expose functionalities. It supports both XML and JSON . Rest api has lightweight requests and responsive framework and it is good for mobile and web apps.

In this scenario ORG B(SOURCE) and ORG A(TARGET)

What steps we need to do on ORG B :-

  1. Create a connected app.
  2. Rest api webservice to fetch data based on the requirement of ORG A and send it back to ORG A.

Note down the Consumer key, Consumer secret(We need to provide it ORG A for authentication purpose along with username, password, security token of the user which ORG A will be using for authentication).

REST API WebService:

@RestResource(urlMapping='/getAccountOnExternalIdRecord/*')
   global with sharing class getAccounttoSingleRecord {
        @Httpget
      global static Account fetchAccount(){
        Account obj=new Account();
        RestRequest req = RestContext.request;
        RestResponse res = Restcontext.response;
        string accId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
        obj=[Select id , name from Account where id=:accId];
        return obj;
      }
   }

What steps we need to do on ORG A :-

  1. Create an apex controller.
  2. Create a visualforce page.
  3. Create a remote site setting for the URL of System B.
  1. CREATE A APEX CONTROLLER:
public class restApiTofetchSingleRecord {
    private string cKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    private string cSecret = 'XXXXXXXXXXXXXXXXXXXXX';
    private string uName = 'XXXXXXXXXXXXXXXXXXX';
    private string passwd = 'Password+SecurityToken';
    public static list < resultWrapper > listWrap {
        get;
        set;
    }
    public restApiTofetchSingleRecord() {
        listWrap = new list < resultWrapper > ();
    }
    public class responseWrapper {
        public string id;
        public string access_token;
        public string instance_url;
    }
    public string getRequestToken() {
        string reqBody = 'grant_type=password&client_id=' + cKey + '&client_secret=' + cSecret + '&username=' + uName + '&password=' + passwd;
        Http h = new Http();
        HttpRequest req = new HttpRequest();
        req.setBody(reqBody);
        req.setMethod('POST');
        req.setEndpoint('https://login.salesforce.com/services/oauth2/token');
        HttpResponse hresp = h.send(req);
        responseWrapper wResp = (responseWrapper) JSON.deserialize(hresp.getBody(), responseWrapper.class);
        system.debug('Instance url' + wResp.instance_url);
        system.debug('session id' + wResp.access_token);
        return wResp.access_token;
    }
    public void getConList() {
        list < account > accList1 = new list < account > ();
        String accToken;
        string responseBody;
        string externalAccId = '0017F00001Xg9LH'; // Id of account from SYSTEM B
        string endPoint = 'https://ap5.salesforce.com/services/apexrest/getAccountOnExternalIdtofetchsinglerecord/' + externalAccId;
        restApiTofetchSingleRecord obj = new restApiTofetchSingleRecord();
        accToken = obj.getRequestToken();
        system.debug('access token' + accToken);
        if (accToken != '') {
            Http h1 = new Http();
            HttpRequest req1 = new HttpRequest();
            req1.setHeader('Authorization', 'Bearer ' + accToken);
            req1.setHeader('Content-Type', 'application/json');
            req1.setMethod('GET');
            req1.setEndpoint(endPoint);
            HttpResponse hresp1 = h1.send(req1);
            resultWrapper wResp1 = (resultWrapper) JSON.deserialize(hresp1.getBody(), resultWrapper.class);
            listWrap.add(wResp1);
        }
    }
    public class resultWrapper {
        public string id {
            get;
            set;
        }
        public string name {
            get;
            set;
        }
    }
}

2. CREATE A VISUALFORCE PAGE:

<apex:page controller="restApiTofetchSingleRecord">
<apex:form >
<apex:pageBlock >
 <apex:pageblockButtons >
 <apex:commandButton value="TEST" action="{!getConList}"/>
 </apex:pageblockButtons>
  <apex:pageblocktable value="{!listWrap}" var="a" >
 <apex:column value="{!a.name}"/>
 </apex:pageBlockTable>
 </apex:pageBlock>
 </apex:form>
</apex:page>

3. Remote site URL:

Leave a Reply