Apex Academy
Módulo 11·04·30 min

Exponer Apex como REST

Con @RestResource, una clase de Apex se convierte en una dirección a la que otros sistemas pueden llamar. Tú decides la URL, qué recibe, qué devuelve y con qué código de estado responde.

En Admin esLa API estándar de Salesforce que usa Data Loader, pero con una puerta hecha a tu medida

✓ En esta sub-lección

  1. 01Crear un servicio REST con @RestResource y @HttpGet.
  2. 02Leer la petición con RestContext y devolver un objeto que se convierte en JSON.
  3. 03Responder con el código de estado correcto cuando no hay nada que devolver.

La nutria: ¿Te acuerdas? · Repaso de la lección 3

¿Dónde vive la clave de una API externa?

Hasta ahora el puente tenía un solo sentido: Salesforce llama al ERP. Ahora el ERP quiere preguntar: «¿en qué etapa está la renovación de ERP-100?». Podría usar la API estándar de Salesforce, pero tendría que conocer tus objetos y tus campos. Mejor una puerta sencilla, hecha a medida.

Apex
@RestResource(urlMapping='/renewals/*')      // la dirección: /services/apexrest/renewals/…
global with sharing class RenewalApi {
    @HttpGet                                 // responde a las peticiones GET
    global static RenewalStatus getRenewal() {
        String erpCode = RestContext.request.requestURI.substringAfterLast('/');
        // … consultar y devolver
    }
}
  • @RestResource(urlMapping='/renewals/*') publica la clase en /services/apexrest/renewals/. El asterisco deja pasar lo que venga detrás, como el código ERP.
  • La clase y sus métodos son global: tienen que verse desde fuera de la org. Cada verbo tiene su anotación (@HttpGet, @HttpPost, @HttpPatch, @HttpDelete), y solo un método por verbo en cada clase.
  • RestContext.request trae la petición (la URL, los parámetros, el cuerpo) y RestContext.response te deja elegir el código de estado.
  • Lo que devuelve el método se convierte solo en JSON: basta con devolver un objeto con sus atributos.

EL ERP LLAMA A /services/apexrest…

Elige una llamada.

Haz de ERP: llama a la puerta con distintos códigos y mira qué responde Salesforce.

La nutria: La misma API que usa Data Loader, a tu medida

Cuando Data Loader o Workbench leen cuentas, llaman a la API estándar de Salesforce, que ya existe para todos los objetos. Apex REST es añadir tu propia dirección a esa API: en vez de «dame el objeto Opportunity con estos filtros», el ERP pregunta «dame la renovación de ERP-100» y tú decides qué contestar.

La nutria: ¿Y por qué no un Flow? Porque la puerta no sería la tuya

Un flow autolanzado sí se puede llamar desde fuera, por la API REST de Salesforce: una petición POST a /services/data/vXX.X/actions/custom/flow/NombreDelFlow. Funciona, pero con las reglas de Salesforce: esa URL, siempre POST y la forma de respuesta de las acciones. No puedes ofrecer un GET /renewals/ERP-100, ni contestar con un 404 cuando no existe. Con Apex REST, la URL, el verbo y el código de estado los diseñas tú.