402 Stimmen

Aufrufen einer REST-API in PHP

Unser Kunde hatte mir eine REST-API zur Verfügung gestellt, für die ich einen PHP-Aufruf machen muss. Aber die mit der API gelieferte Dokumentation ist sehr begrenzt, so dass ich nicht wirklich weiß, wie ich den Dienst aufrufen soll.

Ich habe versucht, es zu googeln, aber das Einzige, was dabei herauskam, war eine bereits abgelaufene Anleitung von Yahoo! zum Aufruf des Dienstes. Keine Erwähnung der Kopfzeilen oder irgendetwas tiefer gehende Informationen.

Gibt es vernünftige Informationen darüber, wie man eine REST-API aufruft oder eine Dokumentation darüber? Denn auch in W3schools, beschreiben sie nur die SOAP-Methode. Was sind verschiedene Optionen für den Rest der API in PHP zu machen?

15voto

Somnath Muluk Punkte 51007

Verwenden Sie HTTPFUL

Httpful ist eine einfache, verkettbare, lesbare PHP-Bibliothek, die das Sprechen von HTTP vernünftig machen soll. Sie ermöglicht es dem Entwickler, sich auf die Interaktion mit APIs zu konzentrieren, anstatt sich durch curl set_opt-Seiten zu wühlen, und ist ein idealer PHP-REST-Client.

Httpful umfasst...

  • Unterstützung lesbarer HTTP-Methoden (GET, PUT, POST, DELETE, HEAD und OPTIONS)
  • Benutzerdefinierte Kopfzeilen
  • Automatisches "intelligentes" Parsing
  • Automatische Serialisierung von Nutzdaten
  • Grundlegende Autorisierung
  • Client-seitige Zertifikatsauthentifizierung
  • Antrag "Vorlagen"

Ex.

Senden Sie eine GET-Anfrage ab. Erhalten Sie eine automatisch geparste JSON-Antwort.

Die Bibliothek bemerkt den JSON Content-Type in der Antwort und parst die Antwort automatisch in ein natives PHP-Objekt.

$uri = "https://www.googleapis.com/freebase/v1/mqlread?query=%7B%22type%22:%22/music/artist%22%2C%22name%22:%22The%20Dead%20Weather%22%2C%22album%22:%5B%5D%7D";
$response = \Httpful\Request::get($uri)->send();

echo 'The Dead Weather has ' . count($response->body->result->album) . " albums.\n";

13voto

Derek Gogol Punkte 1246

Sie müssen wissen, ob die REST-API, die Sie aufrufen, Folgendes unterstützt GET o POST oder beide Methoden. Der folgende Code ist etwas, das für mich funktioniert, ich rufe meine eigene Webdienst-API auf, so dass ich bereits weiß, was die API benötigt und was sie zurückgibt. Er unterstützt sowohl GET y POST Methoden, so dass die weniger sensiblen Informationen in die URL (GET) und die Informationen wie Benutzername und Kennwort werden übermittelt als POST Variablen. Außerdem geht alles über die HTTPS Verbindung.

Innerhalb des API-Codes kodiere ich ein Array, das ich im json-Format zurückgeben möchte, und verwende dann einfach den PHP-Befehl echo $my_json_variable um die json-Zeichenkette für den Client verfügbar zu machen.

Wie Sie also sehen können, gibt meine API json-Daten zurück, aber Sie müssen wissen (oder sich die zurückgegebenen Daten ansehen, um herauszufinden), in welchem Format die Antwort der API vorliegt.

So stelle ich die Verbindung zur API von der Client-Seite aus her:

$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;
}

Übrigens, ich habe auch versucht, die file_get_contents() Methode, wie einige der Benutzer hier vorgeschlagen haben, aber das hat bei mir nicht gut funktioniert. Ich fand heraus, dass die curl Methode schneller und zuverlässiger zu sein.

7voto

d1jhoni1b Punkte 6613

Wie @Christoph Winkler erwähnte, ist dies eine Basisklasse, um dies zu erreichen:

curl_helper.php

// This class has all the necessary code for making API calls thru curl library

class CurlHelper {

// This method will perform an action/method thru HTTP/API calls
// Parameter description:
// Method= POST, PUT, GET etc
// Data= array("param" => "value") ==> index.php?param=value
public static function perform_http_request($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    //curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    //curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

}

Dann können Sie die Datei immer einbinden und z. B. verwenden: beliebig.php

    require_once("curl_helper.php");
    ...
    $action = "GET";
    $url = "api.server.com/model"
    echo "Trying to reach ...";
    echo $url;
    $parameters = array("param" => "value");
    $result = CurlHelper::perform_http_request($action, $url, $parameters);
    echo print_r($result)

6voto

Chuan Ma Punkte 9378

Sie können verwenden file_get_contents zur Ausgabe von http POST/PUT/DELETE/OPTIONS/HEAD Methoden, zusätzlich zu den GET Methode, wie der Funktionsname schon sagt.

Wie poste ich Daten in PHP mit file_get_contents?

5voto

deadrunk Punkte 13207

Es gibt tatsächlich viele Kunden. Einer von ihnen ist Schädlinge - Sehen Sie sich das an. Und denken Sie daran, dass diese REST-Aufrufe einfache http-Anfragen mit verschiedenen Methoden sind: GET, POST, PUT und DELETE.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X