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 esta sub-lección
- 01Crear un servicio REST con @RestResource y @HttpGet.
- 02Leer la petición con RestContext y devolver un objeto que se convierte en JSON.
- 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.
@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.
La nutria: La misma API que usa Data Loader, a tu medida
La nutria: ¿Y por qué no un Flow? Porque la puerta no sería la tuya