REST POST Request Code Examples

Example 1: Typed POST with Named Credential

public with sharing class RestPostService {

    public class RequestBody {
        @AuraEnabled public String externalId;
        @AuraEnabled public String status;
    }

    public class ResponseBody {
        public String result;
        public String correlationId;
    }

    @AuraEnabled
    public static ResponseBody sendPayload(RequestBody payload) {
        HttpRequest req = new HttpRequest();
        req.setEndpoint('callout:MyNamedCredential/api/resource');
        req.setMethod('POST');
        req.setHeader('Content-Type', 'application/json');
        req.setTimeout(120000);
        req.setBody(JSON.serialize(payload));

        HttpResponse res = new Http().send(req);

        if (res.getStatusCode() >= 200 && res.getStatusCode() < 300) {
            return (ResponseBody) JSON.deserialize(res.getBody(), ResponseBody.class);
        }

        throw new CalloutException('POST failed: ' + res.getStatusCode() + ' ' + res.getBody());
    }
}

Example 2: Retry Wrapper for Transient Errors

public with sharing class RestPostRetryService {
    public static HttpResponse postWithRetry(HttpRequest req, Integer maxAttempts) {
        Integer attempts = 0;
        HttpResponse res;

        while (attempts < maxAttempts) {
            attempts++;
            res = new Http().send(req);

            Integer code = res.getStatusCode();
            if (code >= 200 && code < 300) return res;
            if (code != 429 && (code < 500 || code >= 600)) return res;
        }

        return res;
    }
}

Example 3: Test with HttpCalloutMock

@IsTest
private class RestPostServiceTest {
    private class SuccessMock implements HttpCalloutMock {
        public HTTPResponse respond(HTTPRequest req) {
            HttpResponse r = new HttpResponse();
            r.setStatusCode(200);
            r.setBody('{"result":"ok","correlationId":"abc-123"}');
            return r;
        }
    }

    @IsTest
    static void sendPayload_success() {
        Test.setMock(HttpCalloutMock.class, new SuccessMock());

        RestPostService.RequestBody payload = new RestPostService.RequestBody();
        payload.externalId = 'EXT-001';
        payload.status = 'ACTIVE';

        RestPostService.ResponseBody out = RestPostService.sendPayload(payload);
        System.assertEquals('ok', out.result);
    }
}

Implementation Notes