Tendrá que saber si la API REST que está llamando soportes GET
o POST
, o ambos métodos. El código a continuación es algo que funciona para mí, estoy llamando a mi propia API de servicio web, por lo que ya sé qué toma la API y qué devolverá. Es compatible con ambos GET
y con los POST
métodos, por lo que la información menos sensible entra en el URL (GET)
, y la información como nombre de usuario y contraseña se envía como POST
variables. Además, todo pasa por la HTTPS
conexión.
Dentro del código API, codifico una matriz que quiero devolver al formato json, luego simplemente uso el comando PHP echo $my_json_variable
para que esa cadena json esté disponible para el cliente.
Como puede ver, mi API devuelve datos json, pero necesita saber (o mirar los datos devueltos para averiguar) en qué formato está la respuesta de la API.
Así es como me conecto a la API desde el lado del cliente:
$processed = FALSE;
$ERROR_MESSAGE = '';
// ************* Call API:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.myapi.com/api.php?format=json&action=subscribe&email=" . $email_to_subscribe);
curl_setopt($ch, CURLOPT_POST, 1);// set post data to true
curl_setopt($ch, CURLOPT_POSTFIELDS,"username=myname&password=mypass"); // post data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
// returned json string will look like this: {"code":1,"data":"OK"}
// "code" may contain an error code and "data" may contain error string instead of "OK"
$obj = json_decode($json);
if ($obj->{'code'} == '1')
{
$processed = TRUE;
}else{
$ERROR_MESSAGE = $obj->{'data'};
}
...
if (!$processed && $ERROR_MESSAGE != '') {
echo $ERROR_MESSAGE;
}
Por cierto, también traté de usar el file_get_contents()
método que sugirieron algunos de los usuarios aquí, pero eso no funciona bien para mí. Descubrí que el curl
método es más rápido y más confiable.