Выполнение вызовов из Batch Apex в Salesforce: методы и примеры

Метод 1: использование классов HttpRequest и HttpResponse

public class MyBatchClass implements Database.Batchable<SObject>, Database.AllowsCallouts {
    public void execute(Database.BatchableContext context, List<SObject> scope) {
        // Create an HTTP request
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/endpoint');
        request.setMethod('GET');

        // Send the request and get the response
        HttpResponse response = new Http().send(request);
        // Process the response
        if (response.getStatusCode() == 200) {
            // Handle successful response
        } else {
            // Handle error response
        }
    }
}

Метод 2: использование класса Http с будущей аннотацией

public class MyBatchClass implements Database.Batchable<SObject> {
    public void execute(Database.BatchableContext context, List<SObject> scope) {
        // Make a callout using the @future annotation
        makeCallout();
    }

    @future(callout=true)
    public static void makeCallout() {
        // Create an HTTP request
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/endpoint');
        request.setMethod('GET');

        // Send the request and get the response
        HttpResponse response = new Http().send(request);
        // Process the response
        if (response.getStatusCode() == 200) {
            // Handle successful response
        } else {
            // Handle error response
        }
    }
}

Метод 3: использование Apex с постановкой в ​​очередь

public class MyBatchClass implements Database.Batchable<SObject> {
    public void execute(Database.BatchableContext context, List<SObject> scope) {
        // Make a callout using Queueable Apex
        System.enqueueJob(new CalloutQueueable());
    }
}
public class CalloutQueueable implements Queueable, Database.AllowsCallouts {
    public void execute(QueueableContext context) {
        // Create an HTTP request
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/endpoint');
        request.setMethod('GET');

        // Send the request and get the response
        HttpResponse response = new Http().send(request);
        // Process the response
        if (response.getStatusCode() == 200) {
            // Handle successful response
        } else {
            // Handle error response
        }
    }
}

Метод 4. Использование интерфейса HttpCalloutMock для тестирования

public class MyBatchClass implements Database.Batchable<SObject>, Database.AllowsCallouts {
    public void execute(Database.BatchableContext context, List<SObject> scope) {
        // Create an HTTP request
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/endpoint');
        request.setMethod('GET');

        // Associate a mock response with the request
        Test.setMock(HttpCalloutMock.class, new MyHttpCalloutMock());

        // Send the request and get the response
        HttpResponse response = new Http().send(request);
        // Process the response
        if (response.getStatusCode() == 200) {
            // Handle successful response
        } else {
            // Handle error response
        }
    }
}
public class MyHttpCalloutMock implements HttpCalloutMock {
    public HttpResponse respond(HttpRequest request) {
        // Create a mock response
        HttpResponse response = new HttpResponse();
        response.setHeader('Content-Type', 'application/json');
        response.setBody('{"status":"success"}');
        response.setStatusCode(200);
        return response;
    }
}