How to Build a Basic Salesforce REST API (With Test Class) and Test with POSTMAN
Salesforce : Creating Anonymous Apex REST APIs with Force.com
The Force.com REST API lets you integration with Force.com applications using standard HTTP methods. This API provides a way to expose the data you have within your Force.com application to external applications – both mobile and non-mobile. A few useful bits of information related to these REST APIs:
This sample Code you how to implement a simple REST API to fetch Account in Apex class:
@RestResource(urlMapping='/Account/*')
global with sharing class MyRestResource {
@HttpGet
global static Account doGet() {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
String accountId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
Account result = [SELECT Id, Name, Phone, Website FROM Account WHERE Id = :accountId];
return result;
}
}
Call to REST Client (with Curl) :
curl -H "Authorization: Bearer sessionId" "https://instance.salesforce.com/services/apexrest/Account/accountId" Replace sessionId with the
Replace instance with your
Replace accountId with the ID of an account which exists in your organization.
After calling the doGet method, Salesforce returns a JSON response with data such as the following:
{
"attributes" :
{
"type" : "Account",
"url" : "/services/data/v22.0/sobjects/Account/accountId"
},
"Id" : "accountId",
"Name" : "Acme"
}
This sample Code you how to implement a simple REST API to fetch Account in Apex that handles two different HTTP request methods (Commonly Used) :
@RestResource(urlMapping='/Account/*')
global with sharing class RestAccountController {
@HttpGet
global static Account doGet() {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
String accountId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
Account result = [SELECT Id, Name, Phone, Website FROM Account WHERE Id = :accountId];
return result;
}
@HttpPost
global static Account doPost(string accountId) {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
Account result = [SELECT Id, Name, Phone, Website FROM Account WHERE Id = :accountId];
return result;
}
@HttpPost
global static Account doPost(){
String accountId = RestContext.request.requestBody.toString();
Account acc = [SELECT Id FROM Account WHERE id =: accountId];
return acc;
}
}
Create a file called account.txt to contain the data for the account you will create in the next step. (For JSON in POSt Data)
curl -H "Authorization: Bearer sessionId" -H "Content-Type: application/json" -d @account.txt "https://instance.salesforce.com/services/apexrest/Account/"Replace sessionId with the
Replace instance with your
Replace accountId with the ID of an account which exists in your organization.
After calling the doGet method, Salesforce returns a JSON response with data such as the following:
{
"attributes" :
{
"type" : "Account",
"url" : "/services/data/v22.0/sobjects/Account/accountId"
},
"Id" : "accountId",
"Name" : "Acme"
}
Test Class for REST API in Salesforce
@isTest
public class RestAccountControllerTest {
@testSetup static void setup() {
Account ac = (Name='TradePortal') ;
insert ac;
}
@isTest
static void RestAccountControllerGetProcess(){
Account acc = [SELECT Id FROM Account LIMIT 1];
RestRequest request = new RestRequest();
request.requestUri =https://instance.salesforce.com/services/apexrest/Account/'+acc.Id;
request.httpMethod = 'POST';
RestContext.request = request;
RestAccountController.doGet();
}
@isTest
static void RestAccountControllerPostProcess(){
Account acc = [SELECT Id FROM Account LIMIT 1];
RestRequest request = new RestRequest();
request.requestUri =https://instance.salesforce.com/services/apexrest/Account';
request.httpMethod = 'POST';
request.addHeader('Content-Type', 'application/json');
RestContext.request = request;
RestAccountController.doPost(acc.Id);
}
}
Test With Postman REST Client :
Resource after Before request to REST API
Session Id for Authorization : "Authorization: Bearer sessionId" Replace sessionId with theServer Instance URL of ORG : "https://instance.salesforce.com/services/apexrest/Account/" Replace instance with your
accountId : Replace accountId with the ID of an account which exists in your organization.
Methods defined as TestMethod do not support Web service callouts
ReplyDeleteGetting this error