Introducción: Una API no es magia, es una herramienta
\nCuando tu sitio en PHP deja de ser una página estática y empieza a comunicarse con el mundo exterior —bots de Telegram, pasarelas de pago o tu propia app móvil—, inevitablemente te topas con las API (Application Programming Interface). Son simplemente un contrato: «Si me envías una solicitud con este formato, te devolveré los datos». Hoy en la escena PHP hay tres grandes protagonistas: el clásico REST, el flexible GraphQL y el audaz gRPC. ¿Cuál elegir? Vamos a descubrirlo con ejemplos prácticos.
\nEste artículo está escrito para quienes ya saben programar en PHP y quieren ampliar sus horizontes. No solo copiaremos documentación, sino que analizaremos cada protocolo con la mirada de un desarrollador que resuelve problemas reales.
\n\nAPI REST en PHP: el clásico comprobado
\nREST (Representational State Transfer) no es un protocolo, sino un estilo arquitectónico. Utiliza los métodos HTTP (GET, POST, PUT, DELETE) para trabajar con recursos. Si alguna vez escribiste file_get_contents('https://api.ejemplo.com/usuarios'), ya has trabajado con REST.
¿Por qué REST sigue siendo el rey?
\n- \n
- Simplicidad: cualquier cliente HTTP puede usarlo. \n
- Cacheo: a nivel HTTP se pueden cachear las solicitudes GET. \n
- Amplia compatibilidad: desde curl hasta librerías especializadas. \n
Ejemplo de cliente REST en PHP con Guzzle
\nLa librería Guzzle es el estándar de facto para peticiones HTTP en PHP. Instálala con Composer: composer require guzzlehttp/guzzle.
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client([\n 'base_uri' => 'https://jsonplaceholder.typicode.com/',\n 'timeout' => 5.0,\n]);\n\n// Solicitud GET\n$response = $client->get('posts/1');\n$post = json_decode($response->getBody(), true);\necho "Título del post: " . $post['title'] . PHP_EOL;\n\n// Solicitud POST\n$response = $client->post('posts', [\n 'json' => [\n 'title' => 'Nuevo post',\n 'body' => 'Texto del post',\n 'userId' => 1\n ]\n]);\necho "Post creado con ID: " . json_decode($response->getBody(), true)['id'];\n?>\n¿Qué hicimos? Simplemente enviamos peticiones HTTP. REST no requiere una librería especial —incluso puedes usar file_get_contents() con contexto—, pero Guzzle ofrece un manejo de errores cómodo, middleware y transmisión por flujos.
¿Cuándo no es la mejor opción REST?
\nSi necesitas obtener datos relacionados (por ejemplo, un post + autor + comentarios), REST te obligará a hacer varias peticiones. Aquí es donde entra en escena GraphQL.
\n\nGraphQL en PHP: solicita solo lo que necesitas
\nGraphQL es un lenguaje de consultas desarrollado por Facebook. El cliente describe la estructura de la respuesta. Una sola petición, una sola respuesta, sin excesos ni carencias de datos.
\n¿Cómo funciona GraphQL en PHP?
\nParte del servidor: la librería webonyx/graphql-php (instalación: composer require webonyx/graphql-php). La parte del cliente es una petición HTTP POST normal con un cuerpo JSON.
Ejemplo de consulta GraphQL desde PHP
\n<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client(['base_uri' => 'https://countries.trevorblades.com/']);\n\n$query = '\nquery GetCountry {\n country(code: \"RU\") {\n name\n capital\n currency\n languages {\n name\n }\n }\n}';\n\n$response = $client->post('', [\n 'json' => ['query' => $query]\n]);\n\n$data = json_decode($response->getBody(), true);\necho "País: " . $data['data']['country']['name'] . PHP_EOL;\necho "Capital: " . $data['data']['country']['capital'] . PHP_EOL;\necho "Moneda: " . $data['data']['country']['currency'] . PHP_EOL;\necho "Idiomas: ";\nforeach ($data['data']['country']['languages'] as $lang) {\n echo $lang['name'] . " ";\n}\n?>