To make a Webservice callout in batch Apex, we have to implement Database.AllowsCallouts
interface in the class definition. Here is an example to make webservice callout in batch apex.
Batch Apex:
global class AccountBatchApex implements Database.Batchable<sObject>, Database.AllowsCallouts{ global Database.QueryLocator start(Database.BatchableContext bc){ String soqlQuery = 'SELECT Name, AccountNumber, Type From Account'; return Database.getQueryLocator(soqlQuery); } global void execute(Database.BatchableContext bc, List<Account> scope){ for (Account acc : scope){ if(acc.Type.equals('Customer - Direct')){ try{ HttpRequest request = new HttpRequest(); HttpResponse response = new HttpResponse(); Http http = new Http(); String username = 'YourUsername'; String password = 'YourPassword'; Blob headerValue = Blob.valueOf(username + ':' + password); String authorizationHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue); request.setHeader('Authorization', authorizationHeader); request.setHeader('Content-Type', 'application/json'); request.setEndpoint('Your Endpoint URL'); request.setMethod('POST'); request.setBody('Information to Send'); response = http.send(request); if (response.getStatusCode() == 200) { String jsonResponse = response.getBody(); System.debug('Response-' + jsonResponse); } } catch(Exception){ System.debug('Error-' + e.getMessage()); } } } } global void finish(Database.BatchableContext bc){ } }
Note: Total number of callouts (HTTP requests or Web services calls) is 100, that means if you have one callout in your execute method you can keep batch size as 100.